ListView и кнопки внутри ListView



Я хочу, чтобы отобразить Button внутри ListView.
Цель должна состоять в том, чтобы нажать на ListView линия или на кнопке.



нажмите на строку, которая показывает больше информации.
Нажмите на кнопку он показывает в нижней части больше кнопок.



то же самое, что и приложение GMAIL.



справа есть флажок и после нажатия на флажок внизу появляется панель кнопок.



моя проблема после вставки кнопки в , в не кликабельна.
Если я добавлю к LinearLayout С помощью кнопки llButton.setClickable() это работает. Но, только кнопка. Элемент ListView сам больше не реагирует на клики!



Я пробовал этот пример.



та же проблема, что и выше...

1159   5  

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

    Ничего не найдено.