Android gridview OnItemClickListener

Creé con éxito un gridview personalizado (con imágenes y textos). Ahora quiero escribir un método de OnItemClickListener. Puedo conseguir la posición en el método de OnItemClickListener, pero quiero poder hacer clic "amigo" y ver el "artículo chascado: Amigo"

¿Cómo puedo obtener la cadena seleccionada en lugar de la posición? Aquí está mi código fuente

public class Item { Bitmap image; String title; public Item(Bitmap image, String title) { super(); this.image = image; this.title = title; } public Bitmap getImage() { return image; } public void setImage(Bitmap image) { this.image = image; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public class CustomGridViewAdapter extends ArrayAdapter<Item> { Context context; int layoutResourceId; ArrayList<Item> data = new ArrayList<Item>(); public static Item item ; public CustomGridViewAdapter(Context context, int layoutResourceId, ArrayList<Item> data) { super(context, layoutResourceId, data); this.layoutResourceId = layoutResourceId; this.context = context; this.data = data; } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; RecordHolder holder = null; if (row == null) { LayoutInflater inflater = ((Activity) context).getLayoutInflater(); row = inflater.inflate(layoutResourceId, parent, false); holder = new RecordHolder(); holder.txtTitle = (TextView) row.findViewById(R.id.item_text); holder.imageItem = (ImageView) row.findViewById(R.id.item_image); row.setTag(holder); } else { holder = (RecordHolder) row.getTag(); } item= data.get(position); holder.txtTitle.setText(item.getTitle()); holder.imageItem.setImageBitmap(item.getImage()); return row; } public static class RecordHolder { public static TextView txtTitle; ImageView imageItem; } 

}

 public class MainActivity extends Activity { GridView gridView; ArrayList<Item> gridArray = new ArrayList<Item>(); CustomGridViewAdapter customGridAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // set grid view item Bitmap homeIcon = BitmapFactory.decodeResource(this.getResources(), R.drawable.home); Bitmap userIcon = BitmapFactory.decodeResource(this.getResources(), R.drawable.personal); gridArray.add(new Item(homeIcon, "Home")); gridArray.add(new Item(userIcon, "User")); gridArray.add(new Item(homeIcon, "House")); gridArray.add(new Item(userIcon, "Friend")); gridArray.add(new Item(homeIcon, "Home")); gridArray.add(new Item(userIcon, "Personal")); gridArray.add(new Item(homeIcon, "Home")); gridArray.add(new Item(userIcon, "User")); gridArray.add(new Item(homeIcon, "Building")); gridArray.add(new Item(userIcon, "User")); gridArray.add(new Item(homeIcon, "Home")); gridArray.add(new Item(userIcon, "xyz")); gridView = (GridView) findViewById(R.id.gridView1); customGridAdapter = new CustomGridViewAdapter(this, R.layout.row_grid, gridArray); gridView.setAdapter(customGridAdapter); gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), "Item Clicked: " + position, Toast.LENGTH_SHORT).show(); } }); } 

}

Cambia esto

 Toast.makeText(getApplicationContext(), "Item Clicked: " + position, Toast.LENGTH_SHORT).show(); 

a

 Toast.makeText(getApplicationContext(), "Item Clicked: " + ((TextView) v.findViewById(R.id.item_text)).getText(), Toast.LENGTH_SHORT).show(); 

Sé que esta respuesta está llegando un poco tarde, pero me encontré con el mismo problema y lo resolví mediante el uso de etiquetas en los elementos que se pueden hacer clic utilizando setTag() y getTag() . Solo quiero publicar este método en caso de que ayude a otra persona en el futuro. Para utilizar este método y la vista "holding pattern" (como se utiliza anteriormente) sólo tiene que establecer la etiqueta en otro elemento dentro del objeto que está "manteniendo" sus datos.

Por ejemplo:

Ya tiene un objeto RecordHolder con un TextView público para poder establecer la etiqueta en este TextView manera:

holder.txtTitle.setTag("whatever you want")

A continuación, dentro de su método OnItemClickListener.onItemClick puede obtener la etiqueta de la siguiente manera:

String tagValue = ((CustomGridViewAdapter.RecordHolder) view.getTag()).txtTitle.getTag().toString();

tagValue será whatever you want (así puedes asignar los nombres de las vistas si lo deseas). Este método funciona bien si desea almacenar otros datos (como ids o referencias) y no sólo agarrar el texto de TextView o algo como esto. Si sólo desea el mismo texto que está en TextView entonces la respuesta de @ Giru es más apropiada.

  • Manejo de elementos del menú emergente
  • ListView onItemClick no funciona en la actividad
  • Establecer evento de clic de artículo en setOnItemClickListener de listview Android
  • No se puede obtener gridView en el elemento de escucha de clics
  • Establecer un elemento de escucha de clic largo en GridView
  • Selected Item of Autocomplete Textview Mostrar como simple Textview?
  • Mostrar alertDialog con los botones de radio cuando haga clic en un listViewItem
  • ¿Cómo uso OnItemClickListener para iniciar una nueva intención en función de qué elemento se hace clic?
  • Vista de lista personalizada no responde al evento de clic
  • ¿Cómo seleccionar un elemento ListView después de un clic largo?
  • Android Listview en PopupWindow onitemclick no funciona en algún dispositivo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.