Android: контекстное меню не отображается для ListView с элементами, определенными LinearLayout? - PullRequest
3 голосов
/ 23 мая 2010

У меня есть ListActivity и ListView, и я привязал к нему некоторые данные. Данные отображаются нормально, и я также зарегистрировал контекстное меню для представления. Когда я отображаю элементы списка как простой TextView, он работает нормально:

<TextView  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/nametext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

Однако когда я пытаюсь сделать что-то более сложное, например, показать имя и флажок, меню никогда не появляется:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <TextView android:id="@+id/nametext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <CheckBox
        android:id="@+id/namecheckbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>

Может ли длительное нажатие работать на более сложных элементах? Я строю на 2.1.

(редактировать)

Регистрация с этим в ListActivity:

registerForContextMenu(getListView());

Код, который я разместил, является шаблоном элемента для списка.

Ответы [ 5 ]

7 голосов
/ 23 мая 2010

Ваш CheckBox может вмешиваться в дела. Попробуйте использовать CheckedTextView вместо комбинаций LinearLayout, CheckBox и TextView, поскольку CheckedTextView - это то, что Android ожидает от списка CHOICE_MODE_MULTIPLE.

Проверьте $ANDROID_HOME/platforms/$VERSION/data/res/layout/simple_list_item_multiple_choice.xml, где $ANDROID_HOME - это место, где вы установили SDK, а $VERSION - это версия Android (например, android-2.1). Этот ресурс является стандартным ресурсом, который вы должны использовать для списков CHOICE_MODE_MULTIPLE. Не стесняйтесь скопировать его в свой проект и при необходимости изменить стиль CheckedTextView.

3 голосов
/ 23 января 2013

установить флажок свойства focusable = false;

и снова запустите проект ..

1 голос
/ 22 декабря 2011

Нашел по этому месту: http://www.anddev.org/view-layout-resource-problems-f27/custom-list-view-row-item-and-context-menu-t52431.html

Установка флажка не для фокусировки устраняет проблему.

Не уверен, что это вызовет проблемы при навигации по интерфейсу пользователя с помощью чего-то другого, кроме сенсорного экрана (с колесиком или клавишами со стрелками), но это решило мою проблему (мой макет был немного сложнее, чем просто TextView и Checkbox. ..)

0 голосов
/ 16 октября 2010

Это должно быть из обычного ListView. Но если вы начинаете с нуля в новом списке, я бы рассмотрел использование CheckedTextView:

        checkBox.setOnLongClickListener(new View.OnLongClickListener() {

            public boolean onLongClick(View v) {
                // return false to let list's context menu show
                return false;
            }
        });
0 голосов
/ 23 мая 2010

Контекстные меню могут быть зарегистрированы только для подклассов просмотра. Я не знаю, как вы зарегистрировали LinearLayout с помощью контекстного меню, упаковали ли вы его в какой-то вид View? если это так, вы должны опубликовать этот код.

В любом случае, почему бы просто не зарегистрировать TextView каждого элемента списка? Кто бы долго нажимал на чекбокс ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...