Reputation: 451
I have a gridView in which every cell contains an ImageView and a TextView. When the user clicks on an item, I want to take the text of TextView in position which the user clicked. I tried the code below, but every time I take the first element.
grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
ViewGroup gridChild = (ViewGroup) grid.getChildAt(position);
int childSize = gridChild.getChildCount();
for(int k = 0; k < childSize; k++) {
if(gridChild.getChildAt(k) instanceof TextView ){
TextView temp = (TextView) findViewById(gridChild.getChildAt(k).getId());
stationId = temp.getText().toString();
Log.i("stationId", stationId);
}
}
Upvotes: 0
Views: 3672
Reputation: 184
gridItems is a class holding an array list of items in the gridView. use array list user define method getGridItems() to get the array List of gridItems.On which which then call the method .get(position) passing the position index that fired the event as a parameter to .get(position) to retrieve which ever properties associated with am item of the GridIemsList
public class GridItemsList {
private ArrayList<GridItem> gridItems = new ArrayList<GridItem>();
public GridItemsList() {
}
public ArrayList<GridItem> getGridItems() {
return gridItems;
}
public void addToList(GridItem gridItem) {
this.gridItems.add(gridItem);
}
//ManinActivity.java
private GridItemsList gridItems;
//dump some data to arrayList
gridItems = new GridItemsList();
for(int i=0;i<12;i++)
{
GridItem item = new GridItem();
if((i%2)==0)
{
item.setImageId(R.drawable.family);
item.setName("Family");
}
else {
item.setImageId(R.drawable.love);
item.setName("Love");
}
gridItems.addToList(item);
}
CustomGrid adapter = new
CustomGrid(MainActivity.this,gridItems.getGridItems());
grid=(GridView)findViewById(R.id.grid);
grid.setAdapter(adapter);
/***
* create a Toast
*/
grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
String clickedText = gridItems.getGridItems().get(position).getName();
Toast.makeText(MainActivity.this, "You Clicked at " + clickedText , Toast.LENGTH_SHORT).show();
}
});
Upvotes: 0
Reputation: 413
yourGridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String clickedText = yourGridView.getItemAtPosition(position).toString());
}
});
Upvotes: 2
Reputation: 11457
Use This
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View rowView = convertView;
rowView = inflater.inflate(R.layout.gridView_item, null);
TextView tw1 = (TextView) rowView.findViewById(R.id.textview);
ImageView im = (ImageView) rowView.findViewById(R.id.ImgaeView);
rowView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String getText=tw1.getText();
}
return rowView;
}
Upvotes: 0