ListView и кнопки внутри ListView
Я хочу, чтобы отобразить Button внутри ListView.
Цель должна состоять в том, чтобы нажать на ListView линия или на кнопке.
нажмите на строку, которая показывает больше информации.
Нажмите на кнопку он показывает в нижней части больше кнопок.
то же самое, что и приложение GMAIL.
справа есть флажок и после нажатия на флажок внизу появляется панель кнопок.
моя проблема после вставки кнопки в , в не кликабельна.
Если я добавлю к LinearLayout С помощью кнопки llButton.setClickable() это работает. Но, только кнопка. Элемент ListView сам больше не реагирует на клики!
Я пробовал этот пример.
та же проблема, что и выше...
5 ответов:
Если вы используете пользовательский адаптер кнопка нажмите внутри ListView не будет работать, поэтому вы должны попробовать использовать следующий код для проверки
OnItemClickListener.listId.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> list, View v, int pos, long id) { // Your code for item clicks } });
просто чтобы сделать это ясным – и никто, кажется, не сказал что – то такое простое-в то время как нельзя иметь фокусируемую кнопку работы в сочетании с представлением списка, есть гораздо более простое решение для этого.
принятый ответ является заданным - вы всегда должны делать это при настройке прослушивателя щелчка для элементов списка, так что глупо, что OP этого не знал.
Если вы используете XML-макет в качестве элемента списка, просто установите кнопку, чтобы иметь следующий атрибут, и это приведет к тому, что элемент списка также будет доступен для кликабельности:
android:focusable="false"
добавьте строку ниже в XML-элемент списка.
android:descendantFocusability="blocksDescendants"тогда ваш элемент списка будет выглядеть так:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:descendantFocusability="blocksDescendants" android:layout_height="wrap_content" > // Your layout objects here </RelativeLayout>
чтобы событие было вызвано при нажатии кнопки или элемента списка, вы можете сделать следующее:
вы обрабатываете только onItemClick:
mListView.setOnItemClickListener(new ListView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> a, View v, int i, long l) { // handle click here } );в адаптере вы измените кнопку, чтобы она не была кликабельной / фокусируемой (или сделайте это в xml-файле вместо этого):
public class MyAdapter extends BaseAdapter { ... public View getView(int position, View convertView, ViewGroup parent) { ..... Button btn = view.findViewById(R.id.button); btn.setFocusable(false); btn.setClickable(false); } }
В моем случае мне пришлось добавить этот атрибут в ListView :
<ListView ... android:clickable="true" ... </ListView>и в адаптере просто добавить кнопку слушателя в виде кнопки.
wrapper.getButtonHi().setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub DebugUtils.logDebug("Clickeado :: "+ mContact.getUserId()); } });своя важная для того чтобы установить окончательный переменные:
public View getRowView(final int position, View convertView, ViewGroup parent) { final BrowseContactItemWrapper wrapper; final UserModel mContact = lstContact.get(position); ..... }
Comments