Android Gridview y el botón OnItemclick

Aquí está mi clase buttonAdapter que creo que es precisa:

package com.example.test; import android.content.Context; import android.graphics.Color; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.GridView; public class ButtonAdapter extends BaseAdapter { private Context mContext; public String [] fName = { "File 1", "File 2", "Roflcopters"}; // Gets the context so it can be used later public ButtonAdapter(Context c) { mContext = c; } // Total number of things contained within the adapter public int getCount () { return 8; } // Require for structure, not really used in my code. public Object getItem (int position) { return null; } // Require for structure, not really used in my code. Can be used to get the id of an item in the adapter for manual control. public long getItemId (int position) { return position; } public View getView (int position, View convertView, ViewGroup parent){ Button btn; if (convertView == null) { // if it's not recycled, initialize some attributes btn = new Button (mContext); btn.setLayoutParams (new GridView.LayoutParams (190, 190)); btn.setPadding (1, 1, 1, 1); } else { btn = (Button) convertView; } // btn.setText(filesnames[position]); // filenames is an array of strings //btn.setTextColor (Color.WHITE); //btn.setBackgroundResource (R.drawable.sample_2); //btn.setBackgroundColor (Color.BLACK); btn.setHighlightColor(Color.GREEN); btn.setId (position); return btn; } } 

Aquí está mi clase en casa. No puedo conseguir que el onItemClick funcione. Qué estoy haciendo mal aquí:

 package com.example.test; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.Toast; public class home extends Activity implements OnItemClickListener { public final static String EXTRA_MESSAGE1 = "com.example.text.MESSAGE"; public void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView (R.layout.activity_home); GridView gridview = (GridView) findViewById (R.id.gridview); gridview.setAdapter (new ButtonAdapter (this)); /*gridview.setOnItemClickListener (new OnItemClickListener () { public void onItemClick (AdapterView <?> parent, View v, int position, long id) { Toast.makeText (home.this, "" + position, Toast.LENGTH_LONG).show (); Intent intent = new Intent (this, alarm.class); String message = "Position:" + position; intent.putExtra(EXTRA_MESSAGE1, message); startActivity (intent); } }); * */ } @Override public void onItemClick (AdapterView <?> parent, View v, int position, long id) { Intent intent = new Intent (this, alarm.class); String message = "Position:" + position; intent.putExtra(EXTRA_MESSAGE1, message); startActivity (intent); } } 

El onItemClick no funciona y tampoco lo hace el comentado 'setOnItemClickListener' cuando no se comenta y 'onItemClick' se comenta. ¿Qué estoy haciendo mal?

Si GridView, ListView tienen controles de clic aptos como BUtton, entonces onItemClick no se disparará.
Es necesario implementar el Button Click listener en su método getView del adaptador.

me gusta

 public View getView(int position, View convertView, ViewGroup parent) { Button btn; if (convertView == null) { // if it's not recycled, initialize some // attributes btn = new Button (mContext); btn.setLayoutParams(new GridView.LayoutParams(190, 190)); btn.setPadding(1, 1, 1, 1); } else { btn = (Button) convertView; } // btn.setText(filesnames[position]); // filenames is an array of // strings //btn.setTextColor (Color.WHITE); // btn.setBackgroundResource (R.drawable.sample_2); // btn.setBackgroundColor (Color.BLACK); btn.setHighlightColor(Color.GREEN); btn.setId(position); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Handle the click here } }); return btn; } 

Puede agregar esta línea en el diseño principal de los elementos de GridView:

 android:descendantFocusability="blocksDescendants" 

Entonces onItemClickListener.onItemClick() no se disparará cuando toque en subviews que OnClickListener se ha definido para ellos por separado.

He probado que Set Button.onClickListener () (en API 15) no solucionará el problema.

Por lo tanto, el GridView no activará onItemClick si contiene vistas que se pueden hacer clic .

Puede utilizar ImageView en lugar de Button.

Tengo el mismo problema cuando estaba tratando de implementar onitemclick en gridview donde lleno de botón. Porque el botón está robando el foco de cada espacio en gridview , usted tiene que dar el botón inflado android:focusable="false" . Sin embargo, el botón ocupa casi todo el espacio dentro de una cuadrícula, por lo que tiene que hacer clic en el borde mismo del botón para activar la onitemclick llamada onitemclick . Estoy sugiriendo que puede establecer onclick o utilizar la imagen y designe como un botón.

  • ¿Cómo implementar el evento de clic en el icono de la barra de herramientas?
  • ¿Cómo seleccionar un elemento ListView después de un clic largo?
  • Mostrar alertDialog con los botones de radio cuando haga clic en un listViewItem
  • Android setOnItemClickListener no funciona en una fila, pero está bien en otra fila, usando 2 layouts de fila
  • ViewRootImpl: ViewPostImeInputStage processPointer 0 en OnItemClick de Listview en android
  • OnItemClickListener y OnClickListener no funcionan para ListView
  • ListView con TextView autoLink no recibe OnItemClickListener
  • OnListItemClick no funciona para listview?
  • OnItemClickListener (), cómo pasar los datos del elemento pulsado?
  • ¿Cómo recuperar la cadena clicada de un listview usando OnItemClick?
  • Autocompletetextview setonitemselectedlistener no funciona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.