Intereting Posts
Android Opengl ES: GLUtils.glTexImage2D вызывает GL_INVALID_ENUM Как я могу переадресовать свой IP-адрес localhost на эмулятор Android? Уведомление о тревоге Firebase – как показать многострочное сообщение в уведомлении Как вы получаете цвет выделения в Android? Что происходит с выполнением JavaScript (settimeout и т. Д.), Когда iPhone / Android ложится спать? Android PlacePicker закрывается через 2 секунды после запуска Android Parse SDK i / o ошибка неизвестного формата (магия номер 227b) Chrome Browser для Android больше не поддерживает -webkit-overflow-прокрутку? Есть ли альтернатива? Как изменить цвет панели выбора текста, который появляется при копировании текста? Как я могу правильно передать уникальные дополнения к ожидающемуся намерению? Java.util.ConcurrentModificationException в View.setVisibility Создать группу невидимых контактов в Android Запись AAR в NFC: где полезная нагрузка? Android: установить программный код .apk LibGDX и ScrollPane с несколькими виджетами

Элементы ListView не доступны для кликов. Зачем?

У меня есть ListView который использует настраиваемый адаптер, но я не могу нажать на элемент ListView.

Активность для просмотра списка.

 package com.adhamenaya.projects; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.Filter; import android.widget.Filterable; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.adhamenaya.classes.Place; public class PlacesListActivity extends Activity { private ArrayList<Place> places; private ArrayList<String> items; GridviewAdapter mAdapter; private ListView lvPlaces; private EfficientAdapter adap; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.places_list); lvPlaces = (ListView) this.findViewById(R.id.lvPlaces); new DowanloadPlaces().execute(""); } private void bindList(ArrayList<Place> places) { this.places = places; // Start creating the list view to show articles items = new ArrayList<String>(); for (int i = 0; i < places.size(); i++) { items.add(String.valueOf(places.get(i).mName)); } adap = new EfficientAdapter(this); adap.notifyDataSetChanged(); lvPlaces.setAdapter(adap); } // EfficientAdapter : to make a customized list view item public class EfficientAdapter extends BaseAdapter implements Filterable { // The function of inflater to convert objects from XML layout file (ie main.xml) to a programmable LayoutInflater inflater; Context context; public EfficientAdapter(Context context) { inflater = LayoutInflater.from(context); this.context = context; } public int getCount() { // Get the number of items in the list return items.size(); } public Object getItem(int position) { // To return item from a list in the given position return items.get(position); } public long getItemId(int position) { // TODO Auto-generated method stub return 0; } public View getView(final int position, View convertView,ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = inflater.inflate(R.layout.adaptor_content, null); holder = new ViewHolder();// Create an object to hold at components in the list view item holder.textLine = (TextView) convertView.findViewById(R.id.textLine); holder.buttonLine = (Button) convertView.findViewById(R.id.buttonLine); holder.buttonLine.setOnClickListener(new OnClickListener() { private int pos = position; public void onClick(View v) { places.remove(pos); bindList(places);// to bind list items Toast.makeText(getApplicationContext(),"Deleted successfuly :)", Toast.LENGTH_LONG).show(); } }); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } // Bind the data efficiently with the holder. holder.textLine.setText(String.valueOf(places.get(position).mName)); return convertView; } public Filter getFilter() { // TODO Auto-generated method stub return null; } } // ViewHolder : class that represents a list view items static class ViewHolder { TextView textLine; Button buttonLine; } // DownloadRSSFeedsTask: works in a separate thread private class DowanloadPlaces extends AsyncTask<String, Void, ArrayList<Place>> { @Override protected ArrayList<Place> doInBackground(String... params) { ArrayList<Place> places = new ArrayList<Place>(); Place p = new Place(); for(int i =0;i<25;i++){ p.mName = "Al Mathaf Hotel"; places.add(p); } return places; } @Override protected void onPostExecute(ArrayList<Place> places) { bindList(places); } } } 

Layout_list.xml макет

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/lvPlaces"> </ListView> </LinearLayout> 

Макет adaptor_content.xml

 <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textLine" android:layout_centerVertical="true" android:src="@drawable/settings" /> </RelativeLayout> 

Solutions Collecting From Web of "Элементы ListView не доступны для кликов. Зачем?"

Попробуйте это, чтобы получить фокус: View.getFocus ();

Android не позволяет выбирать элементы списка, в которых есть настраиваемые элементы ( кнопки ). Измените атрибут xml кнопки:

 android:focusable="false" 

Он должен по-прежнему быть кликабельным, просто не будет фокусироваться …

У меня была та же проблема с ListView, которая содержала только RadioButton:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <RadioButton android:id="@+id/userNameRadioButton" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> 

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

 radioButton.setFocusableInTouchMode(false); radioButton.setFocusable(false); 

Или в XML-файле:

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

Таким образом, это проблема, связанная с фокусом. С указанными выше модификаторами фокус направлен на ListView при щелчке.

Этот ответ здесь работал для меня: https://stackoverflow.com/a/16536355/5112161

В основном он добавил в LinearLayout или RelativeLayout следующее:

 android:descendantFocusability="blocksDescendants" 

Вам также необходимо УДАЛИТЬ из всего вашего xml следующее:

 android:focusable="false" android:focusable="true" android:clickable="true" android:clickable="false" 

Рассмотрите возможность выбора значения текста, указав android: textIsSelectable = "true"

Не слушайте Google. В макете строк установите

textIsSelectable="false"

Спасибо, Линт (нет!)

Я хотел добавить комментарий к запросу rupps, но у меня недостаточно репутации.

Если вы используете настраиваемый адаптер, расширяющий ArrayAdapter, вы можете перезаписать с помощью isAllItemsEnabled () и isEnabled (int position) в своем классе:

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

Вышеупомянутый фиксированный мой список без кликов. Возможно, этот комментарий также помогает другим, поскольку поисковый запрос «андроид-список не кликабельный» довольно высок в Google.

Элементы просмотра списка можно щелкнуть. Чтобы использовать его, вы должны установить прослушиватель элемента списка в своем списке. Тогда это сработает.

Я довольно поздно, но обнаружил, что я думаю, что это интересно:

Если ваш адаптер сходит с ArrayAdapter, сколько бы я ни пытался, onItemClickListener не вызывается.

Однако, если ваш адаптер сходит с BaseAdapter (поэтому вам нужно реализовать getCount () и getItem (), тривиально для массива), он всегда вызывается.

Я использовал представление и кнопку внутри списка, поэтому я использовал:

 android:focusable="false" 

Для <button> и <view>

После этого я использовал следующий код для своего списка, и он работал

 // Attach the adapter to a ListView ListView listView = (ListView) findViewById(R.id.shipping_item_list); listView.setAdapter(adapter); listView.setOnItemClickListener(listPairedClickItem); private AdapterView.OnItemClickListener listPairedClickItem = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Toast.makeText(getBaseContext(), "Item ", Toast.LENGTH_LONG).show(); } }; 

Для меня проблема заключалась в том, что мои объекты в моем элементе ListView были настроены на число clickable на true .

Set android: clickable = "false" android: focusable = "fasle"