Android onItemClickListener no funciona (No se pueden enfocar en el código)

Esto ha estado volviéndome loco en las últimas horas … y siento que es algo obvio …

He conseguido mi código abajo a un ListView simple con un solo TextView en él, pero todavía no puede parecer hacerla el trabajo (no veo el mensaje de la tostada o del registro en la consola).

¡Cualquier ayuda es muy apreciada! 🙂

MainActivity.java

public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SparseArray<Data> data = createData(); ListView listView = (ListView) findViewById(R.id.listView); final CustomListAdapter adapter = new CustomListAdapter(this, data); listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Log.v("onItemClick", "Clicked"); Toast.makeText(getApplicationContext(), "Clicked", Toast.LENGTH_SHORT).show(); } }); } } 

CustomListAdapter.java

 public class CustomListAdapter extends BaseAdapter { private final SparseArray<Data> data; private LayoutInflater inflater; private final Activity activity; public CustomListAdapter(Activity activity, SparseArray<Data> data) { this.activity = activity; this.data = data; this.inflater = activity.getLayoutInflater(); } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { Log.v("getItem", "" + position); return data.get(position); } @Override public long getItemId(int position) { return 0; } @Override public int getItemViewType(int position) { //TODO: Implement Image vs no image views return 0; } @Override public View getView(int position, View convertView, ViewGroup parentView) { if(convertView == null) { convertView = inflater.inflate(R.layout.data, null); } Data data = (Data) getItem(position); ((TextView) convertView.findViewById(R.id.dataTitle)).setText(data.getTitle()); return convertView; } @Override public int getViewTypeCount() { // TODO Auto-generated method stub return 1; } @Override public boolean isEmpty() { // TODO Auto-generated method stub return false; } @Override public boolean areAllItemsEnabled() { // TODO Auto-generated method stub return false; } @Override public boolean isEnabled(int arg0) { // TODO Auto-generated method stub return false; } @Override public boolean hasStableIds() { // TODO Auto-generated method stub return false; } } 

activity_main.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="0dp" android:paddingLeft="0dp" android:paddingRight="0dp" android:paddingTop="0dp" android:background="@color/background" > <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/background" /> </LinearLayout> 

data.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="8dp" android:paddingRight="8dp" android:paddingTop="8dp" android:paddingBottom="8dp" > <TextView android:id="@+id/dataTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="false" android:clickable="false" android:paddingLeft="0dp" android:paddingBottom="8dp" android:textSize="26sp" android:textColor="@color/dataTitle" /> </LinearLayout> 

NOTA: Veo que al menos el tacto está siendo registrado por el dispositivo:

 07-15 22:00:50.734: I/InputReader(804): Touch event's action is 0x0 (deviceType=0) [pCnt=1, s=0.23535 ] when=378716384422000 07-15 22:00:50.734: I/InputDispatcher(804): Delivering touch to: action: 0x4 07-15 22:00:50.734: I/InputDispatcher(804): Delivering touch to: action: 0x0 

  1. Quitar android:clickable="false" de TextView.
  2. Además, quite android:focusable="false" .

No puedes capturar clics si los has configurado como falsos.

En segundo lugar,

 @Override public boolean areAllItemsEnabled() { // TODO Auto-generated method stub return false; } @Override public boolean isEnabled(int arg0) { // TODO Auto-generated method stub return false; } 

Devuelve true en estos métodos. No podrá captar clics si estos devuelven false para cada elemento.

OMI no es una buena idea anular métodos que no necesariamente tiene o no está seguro de qué debe devolver el método.

  • OnItemClickListener (), cómo pasar los datos del elemento pulsado?
  • Ignore OnItemSelectedListener encendiendo en crear
  • Cómo actualizar el contenido de una sola fila en mi ListView utilizando OnItemClick
  • ¿Cómo seleccionar un elemento ListView después de un clic largo?
  • OnItemClickListener no funciona con el elemento ListView que contiene el botón
  • Manejo de elementos del menú emergente
  • ListView onItemClickListener no se llama
  • Crear intención dentro del listview del evento setOnItemClickListener
  • RecyclerView onItemClick Listener
  • Android gridview OnItemClickListener
  • android: listview: consigue el valor del cursor en el elemento click
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.