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
- Android GridView OnItemLongClick escuchador llamado después de OnItemClick
- RecyclerView onItemClick Listener
- Cuando agrego una vista a un elemento ListView, este elemento reacciona ya no correctamente
- Manejo de un elemento de menú Haga clic en Evento - Android
- OnItemClickListener y OnClickListener no funcionan para ListView
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(); } }); }
}
- Establecer en el oyente de clic de artículo dentro onBindViewHolder () con RecyclerView.Adapter
- OnItemClickListener () no funciona con el adaptador de lista
- SetOnItemLongClickListener y setOnItemClickListener no se activan cuando se utiliza arrastre-ordenar-listview (DSLV)
- Realizar onClickListener en ImageView en GridView
- Haga clic en largo Haga clic en span no disparar hasta que se haga clic
- OnItemClickListener no funciona con el elemento ListView que contiene el botón
- Setvisibility (view.visible) no funciona después de setvisibility (view.gone)
- Cómo actualizar el contenido de una sola fila en mi ListView utilizando OnItemClick
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.
- Android bluetooth socket.connect () falla
- Android renombra el nombre del dispositivo para wifi-direct