我有一个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());
我发布的代码是列表的项目模板。
答案 0 :(得分:7)
您的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
的样式。
答案 1 :(得分:3)
设置复选框属性 focusable = false;
再次运行项目..
答案 2 :(得分:1)
将复选框设置为无法对焦可以解决问题。
不确定在使用除触摸屏以外的其他东西(使用滚轮或箭头键)导航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;
}
});