Android:LinearLayout定义的ListView成员无法显示上下文菜单?

3

我有一个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
您的 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 的样式。

也许不完全是这样。视图绑定不再起作用了。当 CheckedTextView 项是列表的一部分时,似乎无法手动选中它们。 - RandomEngy
在你的 ListView 上使用 setItemChecked() - CommonsWare

3

设置复选框属性focusable = false;

然后重新运行项目。


我也遇到了这个问题。通过添加focusable=false来解决它。但我不明白为什么。你能详细解释一下吗? - alexhilton

1

0

这也适用于常规的ListView。但是,如果您要从头开始创建新列表,则可以考虑使用CheckedTextView:

        checkBox.setOnLongClickListener(new View.OnLongClickListener() {

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

0

上下文菜单只能注册给View的子类。我不知道你是如何注册LinearLayout与上下文菜单的,你是否将其包装在某种类型的View中?如果是的话,你应该发布那段代码。

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


谢谢。我在注册上下文菜单的代码中添加了一行。我应该为列表中的每个TextView单独注册吗?当项目添加时,我需要重新注册吗? - RandomEngy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接