ListView и кнопки внутри ListView
Я хочу показать Button
внутри ListView
.
Цель состоит в том, чтобы щелкнуть по строке ListView
или на кнопке.
Нажмите на строку, на которой отображается дополнительная информация.
Нажмите на кнопку, которая показывает внизу больше кнопок.
То же, что и приложение GMAIL.
Справа установлен флажок и после нажатия на кнопку снизу появляется панель кнопок.
Моя проблема заключается в том, чтобы вставить кнопку в ListView
, кнопка не доступна.
Если я добавлю к LinearLayout
с помощью кнопки llButton.setClickable()
, она будет работать. Но только кнопка. Сам ListView
больше не реагирует на клики!
Я пробовал этот пример.
Та же проблема, что и выше...
Ответы
Ответ 1
Если вы используете пользовательский адаптер, кнопка "Щелчок" внутри ListView не будет работать, поэтому вы должны попробовать использовать следующий код для проверки OnItemClickListener
.
listId.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
// Your code for item clicks
}
});
Ответ 2
Просто, чтобы сделать это ясно - и никто, кажется, не сказал что-то такое простое - в то время как одному не разрешено работать с фокусируемыми кнопками в сочетании со списком, для этого существует гораздо более простое решение.
Принятый ответ - заданный - вы всегда должны это делать при настройке прослушивателя кликов для элементов списка, так что глупо, что OP этого не знал.
Если вы используете XML-макет в качестве элемента списка, просто установите для кнопки следующий атрибут, и это приведет к тому, что элемент списка будет доступен для клика:
android:focusable="false"
Ответ 3
Добавьте строку ниже в свой 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>
Ответ 4
Чтобы активировать событие, когда нажата кнопка или элемент списка, вы можете сделать следующее:
Вы обрабатываете только 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);
}
}
Ответ 5
В моем случае мне пришлось добавить этот атрибут в 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);
.....
}