Android:上下文菜单没有显示ListView,其成员由LinearLayout定义?

时间:2010-05-23 02:44:39

标签: java android listview

我有一个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"/>

然而,当我尝试更复杂的东西时,比如显示名称和CheckBox,菜单永远不会出现:

<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 个答案:

答案 0 :(得分:7)

您的CheckBox可能会干扰问题。考虑使用CheckedTextView而不是LinearLayoutCheckBoxTextView组合,因为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的样式。

答案 1 :(得分:3)

设置复选框属性 focusable = false;

再次运行项目..

答案 2 :(得分:1)

在这个地方找到:http://www.anddev.org/view-layout-resource-problems-f27/custom-list-view-row-item-and-context-menu-t52431.html

将复选框设置为无法对焦可以解决问题。

不确定在使用除触摸屏以外的其他东西(使用滚轮或箭头键)导航UI时是否会导致问题,但它解决了我的问题(我的布局比TextView和Checkbox更复杂一些。 ..)

答案 3 :(得分:0)

上下文菜单只能注册到View的子类。我不知道你是如何使用上下文菜单注册LinearLayout的,你是否将它打包在某种类型的View中?如果是这样,你应该发布该代码。

无论如何为什么不只是注册每个列表项的TextView?谁会长按一个复选框...

答案 4 :(得分:0)

这应该来自常规的ListView。但是如果你从头开始新的列表,我会考虑使用CheckedTextView:

        checkBox.setOnLongClickListener(new View.OnLongClickListener() {

            public boolean onLongClick(View v) {
                // return false to let list's context menu show
                return false;
            }
        });