Отключить длинный щелчок для заголовков (или нижних колонтитулов) в ListView

Мой вопрос похож на этот: ListView: отключение щелчка/фокуса

Однако я не хочу отключать onClick по умолчанию, просто длинный щелчок. Я зарегистрировал свой ListView для создания контекстного меню и хочу отключить его для элемента заголовка (или, по крайней мере, изменить его поведение). Как бы я это сделал?

Спасибо!


person SapphireSun    schedule 09.01.2011    source источник


Ответы (3)


Догадаться! Не было очевидно, что menuInfo обязательно был AdapterContextMenuInfo (у которого есть позиция).

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    if (((AdapterContextMenuInfo)menuInfo).position == 1) {
        inflater.inflate(R.menu.foo1, menu);
        return;
    }
    inflater.inflate(R.menu.foo2, menu);
}
person SapphireSun    schedule 09.01.2011

Я не пробовал это, но это может сработать.

ListView расширяет ViewGroup, поэтому, когда ListView «долго щелкают», слушателю следует передать, какое дочернее представление находится под долгим щелчком.

Создайте свой собственный класс ListView, который реализует onLongClickListener, затем проверьте, является ли представление вашим заголовком или нижним колонтитулом, и, если да, верните «true», чтобы показать, что длинный щелчок был «израсходован», и указать, что никаких дальнейших действий не должно быть взятый.

protected MyListView extends ListView
    implements onLongClickListener {

    public boolean onLongClick (View v) {
        boolean longClickConsumed = false;

        // Check if v is either your Header or Footer
        // if so then set longClickConsumed to be true

        return longClickConsumed;
    }
}
person Squonk    schedule 09.01.2011

Этот ответ почти хорош, проблема в том, что длинный щелчок не отменяется, он просто имеет альтернативное поведение. Кроме того, ничего не делая, это запутает пользователя, поскольку пользовательский интерфейс будет действовать так, как если бы был длинный щелчок, но ничего не произошло.

Решение очень простое.

  1. Отключите как обычный клик, так и длинный клик, добавив верхний/нижний колонтитул с этой функцией listView.addFooterView(footer, null, false);
  2. Установите прослушиватель кликов вручную в верхнем/нижнем колонтитуле.
person nheimann1    schedule 09.05.2014