studio otro llamar item hacer getitematposition clic adapterview activity android gridview onitemclicklistener

otro - OnItemClickListener no se activa en Android GridView



listview onitemclicklistener android (6)

Hola chico, finalmente tengo una solución ...

lo que estábamos haciendo es acceder directamente al diseño dentro de GridView, por lo que onItemClickListener encuentra confuso el acceso al elemento.

Entonces, la solución es aplicar OnClickListener dentro del Adaptador (es decir, normalmente ArrayAdapter)

así que lo que intento decir es:

public View getView(int position, View convertView, ViewGroup parent) { //Here row is a view and we can set OnClickListener on this final View row; ViewHolder holder = null; if (convertView == null) { LayoutInflater inflater = ((Activity) context).getLayoutInflater(); //Here we inflate the layout to view (linear in my case) row = inflater.inflate(layoutResourceId, parent, false); holder = new ViewHolder(); holder.imageTitle = (TextView) row.findViewById(R.id.text); holder.image = (ImageView) row.findViewById(R.id.image); row.setTag(holder); } else { row = convertView; holder = (ViewHolder) row.getTag(); } ImageItem item = data.get(position); holder.imageTitle.setText(item.getTitle()); holder.image.setImageBitmap(item.getImage()); //Now get the id or whatever needed row.setId(position); // Now set the onClickListener row.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(context, "Clicked" + row.getId() + "!!", Toast.LENGTH_SHORT).show(); } }); return row; }

Tengo un Gridview llenado por un adaptador que devuelve LinearLayouts, cada uno contiene un ImageButton y TextView.

En el adaptador, estoy vinculando un evento onClick y onLongClick al ImageButton.

Estoy intentando vincular OnItemClickListener a la vista de cuadrícula, pero no sé por qué el onItemclicked nunca se activó.

Es mi sexta hora sin nada.

Por cierto; OnItemSelectListener funciona perfectamente en la Grilla.

Estoy comprobando si algún fragmento de código maneja accidentalmente el onItemClicked pero aún no se pudo capturar.

Necesito ayuda chicos.

gridView = (GridView) layoutInflater.inflate(R.layout.gridview, null); gridView.setOnItemClickListener(new ItemClickListener()); . . . //inner handler class class ItemClickListener implements AdapterView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(mainActivity.getApplicationContext(),view + " clicked at pos " + i,Toast.LENGTH_SHORT).show(); } }


Intenta establecer

android:clickable="false" android:focusable="false"


Me encuentro con el mismo problema también, por varias razones. Entonces, aquí están mis consejos:

  1. Extienda BaseAdapter para su adaptador;
  2. Use OnClickListener dentro de getView en el adaptador configurando OnItemClickListener para GridView ;
  3. Evite configurar LayoutParams varias veces;
  4. Compruebe si position = 0, no use convertView, infle nueva vista ;
  5. Establezca OnClickListener no solo para Vista padre, sino para cualquier vista secundaria, si la hay;
  6. Haz que todas tus vistas sean clicables.

Acabo de probarlo en 4 dispositivos, y esta solución funciona como se esperaba. Espero, te ayudará en tu caso. Corrígeme, si hice algo mal.

Código de diseño XML:

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="100dp" android:layout_height="100dp" android:background="#273238" android:clickable="true" android:focusable="true" android:focusableInTouchMode="true" android:padding="1dp"> <ImageView android:id="@+id/open_image_item_imageview" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/loh" android:clickable="true" android:focusable="false" android:focusableInTouchMode="false" android:scaleType="centerCrop"/> <TextView android:id="@+id/open_image_item_textview" android:layout_width="match_parent" android:layout_height="wrap_content" android:clickable="true" android:focusable="false" android:focusableInTouchMode="false" android:layout_gravity="bottom" android:padding="4dp" android:textSize="10sp" android:ellipsize="start" android:background="#55000000" android:textColor="#FFFFFF" android:text="image name"/> </FrameLayout>

Código de adaptador Java:

@Override public View getView(final int position, View convertView, ViewGroup parent) { View view = null; if(convertView != null && position != 0) view = convertView; else{ view = LayoutInflater.from(getContext()).inflate(R.layout.open_image_item_layout, null, false); view.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, size)); } TextView textView = (TextView)view.findViewById(R.id.open_image_item_textview); ImageView imageView = (ImageView)view.findViewById(R.id.open_image_item_imageview); ... View.OnClickListener onClickListener = getOnClickListener(files[position]); view.setOnClickListener(onClickListener); textView.setOnClickListener(onClickListener); imageView.setOnClickListener(onClickListener); return view; }


No use objetos clicables en la grilla. En ese caso, Android no puede manejar el evento click de GridView .

En su lugar, use algo para mostrar una vista de interfaz de usuario similar. Luego maneje las acciones de clic de ese objeto.

No: coloque el Button en GridView para realizar algunas acciones de clic.

Hacer: poner un ImageView lugar de ImageButton y manejar los eventos click de ImageView .


Si quiere usar Button o ImageButton entonces necesita escribir estos atributos en su código xml de los widgets.

android:focusable="false" android:focusableInTouchMode="false"

Funciona para mí

Pero en GridView, trate de evitar el uso de estos widgets. Puede usar cualquier otro widgets en lugar de estos (como ImageView o cualquier otro).


También asegúrese de que su ListAdpter devuelva verdadero para

public boolean isEnabled (int _position)

para el puesto en el que desea hacer clic.