Android setOnItemClickListener no funciona en una fila, pero está bien en otra fila, usando 2 layouts de fila

Im que usa un listView que tiene 2 disposiciones para las filas en una fila el

SetOnItemClickListener

Pero en la otra fila no reconoce los grifos,

public void initItemTable() { listViewItem = (ListView) getView().findViewById(R.id.listViewItem); listViewItem.setAdapter(new PhoneItemAdapter(new ItemPhoneDataSource().getItems())); listViewItem.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Log.d("mensa", "item index :"+arg2); } }); } // private class PhoneItemAdapter extends BaseAdapter { final List<RowPhone> rows;//row //data source, style PhoneItemAdapter(List<ItemPhone> animals) { rows = new ArrayList<RowPhone>();//member variable //choose cell! iterator for (ItemPhone item : animals) { if (item.getType().equals("item")) { rows.add(new RowItemPhone(LayoutInflater.from(getActivity()), item)); } else { rows.add(new RowFolderPhone(LayoutInflater.from(getActivity()), item)); //imageRow! } } } //delegate @Override public int getViewTypeCount() { return RowTypePhone.values().length; } @Override public int getItemViewType(int position) { //con cast return ((RowPhone) rows.get(position)).getViewType(); } public int getCount() { return rows.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { //cambiado con cast! return ((RowPhone) rows.get(position)).getView(convertView); } } 

Así que el toque se detecta cuando "item.getType ()" es la carpeta, pero no en el elemento,

. ¿Debo incluir el código para RowItemPhone.java y RowFolderPhone.java?

Así que cómo solucionar este problema de grifo?

¡Gracias!

Editar 1. RowPhone.java

 public interface RowPhone { public View getView(View convertView); public int getViewType(); } 

Editar 2. RowFolder.java .. el que tienen el toque de detección de multa:

 public class RowItemPhone implements RowPhone{ private final ItemPhone item; private final LayoutInflater inflater; public RowItemPhone(LayoutInflater inflater, ItemPhone animal) { this.item = animal; this.inflater = inflater; } //text doble public View getView(View convertView) { ViewHolder holder; View view = null; if (convertView == null) { //ViewGroup viewGroup = (ViewGroup)inflater.inflate(R.layout.row_item_phone, null); ViewGroup viewGroup = (ViewGroup)inflater.inflate(R.layout.row_item_phone, (ViewGroup) view, false); holder = new ViewHolder( (ImageView)viewGroup.findViewById(R.id.image_item), (TextView)viewGroup.findViewById(R.id.title), (TextView)viewGroup.findViewById(R.id.description)); viewGroup.setTag(holder); //pa qy como usa tag! view = viewGroup; } else { view = convertView; holder = (ViewHolder)convertView.getTag(); } //setup holder.imageView.setImageResource(item.getImageId()); holder.descriptionView.setText(item.getDescription()); holder.titleView.setText(item.getName()); return view; } public int getViewType() { return RowTypePhone.DESCRIPTION_ROW.ordinal(); } private static class ViewHolder { final ImageView imageView; final TextView titleView; final TextView descriptionView; private ViewHolder(ImageView imageView, TextView titleView, TextView descriptionView) { this.imageView = imageView; this.titleView = titleView; this.descriptionView = descriptionView; } } } 

Y aquí el RowFolderPhone.java … mostrando bien, pero no detectando grifos:

 public class RowFolderPhone implements RowPhone { private final ItemPhone item; private final LayoutInflater inflater; public RowFolderPhone(LayoutInflater inflater, ItemPhone animal) { this.item = animal; this.inflater = inflater; } public View getView(View convertView) { ViewHolder holder; View view = null; //we have a don't have a converView so we'll have to create a new one if (convertView == null) { // ViewGroup viewGroup = (ViewGroup)inflater.inflate(R.layout.row_folder_phone, null); ViewGroup viewGroup = (ViewGroup)inflater.inflate(R.layout.row_folder_phone, (ViewGroup) view, false); //use the view holder pattern to save of already looked up subview holder = new ViewHolder((ImageView)viewGroup.findViewById(R.id.image), (TextView)viewGroup.findViewById(R.id.title)); viewGroup.setTag(holder); view = viewGroup; } else { //get the holder back out holder = (ViewHolder)convertView.getTag(); view = convertView; } //actually setup the view holder.imageView.setImageResource(item.getImageId()); holder.titleView.setText(item.getName()); return view; } public int getViewType() { return RowTypePhone.IMAGE_ROW.ordinal(); } private static class ViewHolder { final ImageView imageView; final TextView titleView; private ViewHolder(ImageView imageView, TextView titleView) { this.imageView = imageView; this.titleView = titleView; } } } 

Hay algo mal con tu método getItem en PhoneItemAdapter. El método getItem debe devolver el elemento de la lista no la posición. Por lo tanto, debe reemplazar su código por

 public RowPhone getItem(int position) { return rows.get(position); } 

El problema se solucionó estableciendo descendantFocusability

En: row_item_phone.xml

  <RelativeLayout ... android:descendantFocusability="blocksDescendants" 
  • Autocompletetextview setonitemselectedlistener no funciona
  • ¿Cómo recuperar la cadena clicada de un listview usando OnItemClick?
  • Recyclerview addOnItemTouchListener obtiene la vista previa que se hace clic en la fila
  • Cómo crear listview onItemclicklistener
  • OnItemClickListener no funciona con el elemento ListView que contiene el botón
  • OnListItemClick no funciona para listview?
  • OnItemClickListener no funciona correctamente cuando el adaptador contiene un botón con onClickListener
  • Cómo actualizar el contenido de una sola fila en mi ListView utilizando OnItemClick
  • Android onItemClickListener no funciona (No se pueden enfocar en el código)
  • SetOnItemLongClickListener y setOnItemClickListener no se activan cuando se utiliza arrastre-ordenar-listview (DSLV)
  • Realizar onClickListener en ImageView en GridView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.