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
- OnItemClickListener () no funciona con el adaptador de lista
- Cuando agrego una vista a un elemento ListView, este elemento reacciona ya no correctamente
- Setvisibility (view.visible) no funciona después de setvisibility (view.gone)
- Selected Item of Autocomplete Textview Mostrar como simple Textview?
- Crear intención dentro del listview del evento 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; } } }
- Ignore OnItemSelectedListener encendiendo en crear
- ¿Cómo seleccionar un elemento ListView después de un clic largo?
- SetOnItemClickListener VS setOnItemSelectedListener en ListView.
- Vista de lista personalizada no responde al evento de clic
- Obtener ID de la vista en GridView
- RecyclerView onItemClick Listener
- ¿Cómo uso OnItemClickListener para iniciar una nueva intención en función de qué elemento se hace clic?
- AutoCompleteTextView detecta cuando se selecciona la entrada de la lista editada por el usuario
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"