Есть кастомизированный ListView c такой разметкой каждого элемента:
Адаптер
public class IconAdapter extends BaseAdapter {
Context ctx;
LayoutInflater lInflater;
ArrayList
public IconAdapter(Context context, ArrayList
@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
Комментариев нет:
Отправить комментарий