Страницы

Поиск по вопросам

понедельник, 17 июня 2019 г.

Как определить по какому из View было нажатие в кастомизированном ListView

Есть кастомизированный ListView c такой разметкой каждого элемента:




Адаптер
public class IconAdapter extends BaseAdapter { Context ctx; LayoutInflater lInflater; ArrayList objects;
public IconAdapter(Context context, ArrayList icons) { ctx = context; objects = icons; lInflater = (LayoutInflater) ctx .getSystemService(Context.LAYOUT_INFLATER_SERVICE); }
@Override public int getCount() { return objects.size(); }
@Override public Object getItem(int position) { return objects.get(position); }
@Override public long getItemId(int position) { return position; }
@Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { view = lInflater.inflate(R.layout.item_icon, parent, false); }
Icon p = getProduct(position);
((TextView) view.findViewById(R.id.id_icon)).setText(String.valueOf(p.id)); ((TextView) view.findViewById(R.id.name_icon)).setText(p.name); return view; }
Icon getProduct(int position) { return ((Icon) getItem(position)); }
}
Каким образом можно узнать на какой View в строке нажал пользователь?


Ответ

Несколько вариантов:
Если действия должны быть разными, то лучше в адаптере, в getView повесить по слушателю отдельному на каждую вьюху. Если действия схожи, то также там же вешайте слушатель на корневую вьюху элемента списка и определяйте в нем ID нажатой вьюхи Повесьте слушатель снаружи адаптера (OnItemClickListener) и в нём определяйте ID нажатой вьюхи. Этот вариант самый негибкий. И, когда вы перейдёте с устаревшего ListView на RecyclerView вам придётся вернуться к п1 или п2

Комментариев нет:

Отправить комментарий