OnItemClickListener и OnClickListener не работают в ListView

Я использовал Custom ListView, и я показываю некоторые данные, используя тот же ListView.

Когда я нажимаю на элемент «Список», onClickListener не вызывается. Я не могу выбрать элемент списка.

Код макета:

        

Код адаптера:

  public class CustomListAdapter extends BaseAdapter { ArrayList PropertiesArray; private LayoutInflater Inflater; public CustomListAdapter(ArrayList PropertiesArray) { this.PropertiesArray=PropertiesArray; } @Override public int getCount() { // TODO Auto-generated method stub return PropertiesArray.size(); } @Override public Object getItem(int position) { return PropertiesArray.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, final ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); convertView = inflater.inflate(R.layout.customlistview, parent, false); } final Propety ListArray = PropertiesArray.get(position); TextView tvPropertyName = (TextView) convertView.findViewById(R.id.tvCity); tvPropertyName.setText(ListArray.getName()); TextView tvPrice = (TextView) convertView.findViewById(R.id.tvprice); tvPrice.setText(ListArray.getPrice()); ImageView imgProperty = (ImageView) convertView.findViewById(R.id.list_image); imgProperty.setImageResource(R.drawable.ic_launcher); convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(parent.getContext(), "view clicked: " + ListArray.getName(), Toast.LENGTH_SHORT).show(); } }); return convertView; } } 

Код ListView:

  ListView propertylistview = (ListView) findViewById(R.id.listview); CustomListAdapter customlistview=new CustomListAdapter(PropertiesArray); propertylistview.setAdapter(customlistview); 

ListView XML:

   

custom.xml:

            

Даже прокрутка не работает.

Я не могу понять, почему это происходит? Я что-то упускаю?

Любая помощь в разрешении этого оценивается.

Следующее выполнит эту работу в вашем случае.

 ListView propertylistview = (ListView) findViewById(R.id.listview); propertylistview.setOnItemClickListener( myListViewClicked ): OnItemClickListener myListViewClicked = new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Toast.makeText(YourActivity.this, "Clicked at positon = " + position, Toast.LENGTH_SHORT).show(); } }; 

Не забывайте удалить следующее из CustomAdapter

  convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(parent.getContext(), "view clicked: " + ListArray.getName(), Toast.LENGTH_SHORT).show(); } }); 

Я согласен с Ninjia, но вы должны добавить эти данные в XML-код: вы должны определить все дочерние объекты в списке элементов (TextView, ImageView и т. Д.):

 android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" 

И для корневого элемента RelativeLayout / LinearLayout и так, определите:

 android:clickable="false" android:descendantFocusability="blocksDescendants" android:focusable="false" android:focusableInTouchMode="false" 

Если вы их не определите, они «поймают» событие click. И если у вас есть пользовательский адаптер listView, просто проверьте, что вы переопределите:

 @Override public boolean isEnabled(int position) { return true; } 

простой код, который решил мою проблему, и метод view.setOnClickListener должен быть в моем пользовательском адаптере

  view.setFocusable(false) 

Если события касания перехватываются внутри макета ячейки, в макете вашей пользовательской ячейки задайте android:descendantFocusability="blocksDescendants" на макете верхнего уровня вашей ячейки. Для меня было слишком больно добавлять атрибуты xml для каждого отдельного представления.

Обратите внимание, что это также можно установить в коде:

cell.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);

Я также пробовал это с помощью ListView внутри ячейки, и мне пришлось переопределить onTouchEvent, чтобы заставить его работать:

 public class NoTouchListView extends ListView { @Override public boolean onTouchEvent(MotionEvent ev) { return false; } } 

Проверьте один раз:

макет или любое представление не должны быть `android: clickable =” true “и android: focusable =” true ”

если он просто удалит и запустит приложение снова.

Даже у меня была та же проблема, у меня есть флажок, я сделал следующее для маскировки itemClickListener,

Добавлены следующие свойства к флажку,

 android:focusable="false" android:focusableInTouchMode="false" android:clickable="false" 

и ItemClickListner начал работать.

Для подробного примера вы можете перейти по ссылке,

http://knowledge-cess.com/android-itemclicklistner-with-checkbox-or-radiobutton/

Надеюсь, это поможет Cheers !!

Для TextView вы также должны использовать

 android:textIsSelectable="false" 

https://developer.android.com/reference/android/widget/TextView.html#setTextIsSelectable

  • Преобразование списка в * args при вызове функции
  • Заменить значения в списке с помощью Python
  • Как выполнить бинарный поиск в IList ?
  • Как скопировать список?
  • Цвет фона элемента ListBox (winforms)
  • Как преобразовать строку ключа, разделенного пробелами, пары значений уникальных слов в dict
  • Как реализовать держатель вида?
  • Вызов метода активности из адаптера
  • Как подсчитать количество вхождений элементов в списке в Prolog
  • Получить список процессов в Windows с помощью безопасного набора символов
  • Эффективное пересечение двух List в Java?
  • Давайте будем гением компьютера.