我是Android开发的新手,我正在开发运行Android 3.1的平板电脑的应用程序。 主要活动分为更多功能部分,其中一个显示部分项目列表,长按项目应打开上下文菜单。 我有一个问题,因为我无法使其发挥作用。
主要活动扩展了MapActivity,因为它还包含地图...... ListView 使用 SimpleCursorAdapter 。
列表视图在主要活动的onCreate方法的上下文菜单中注册:
alarmList = (ListView) findViewById (R.id.alarmList);
registerForContextMenu(alarmList);
主要活动会覆盖 onCreateContextMenu 以及 onContextItemSelected 方法,但是在单击该项时永远不会调用此方法。
我想知道在使用 ArrayAdapter 和项目的简单字符串显示时,列表的上下文菜单运行良好,列表提供了一个很好的项目选择(点击时有一些很好的淡入淡出 - 出效应)。但是当我将适配器更改为 SimpleCursorAdapter 时,列表视图对点击完全没有反应。要“模拟”我为ListView添加了可点击属性的点击次数:
<ListView android:id="@+id/alarmList" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true"/>
单个列表项使用自己的布局进行格式化,其开头如下: [alarm_list_item.xml:]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearLayout" android:layout_width="match_parent" android:background="@color/alarm_list_bg"
android:clickable="true" android:baselineAligned="true" android:layout_height="wrap_content" android:minHeight="65dp">
...
[alarm_list_bg:]
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_pressed="false" android:drawable="@color/black_12"/>
<item android:state_pressed="true" android:drawable="@color/grey_12" />
<item android:state_selected="true" android:state_pressed="false" android:drawable="@color/blue_12" />
</selector>
我尝试直接在 ListView 实例( OnItemLongClickListener , OnCreateContextMenuListener , OnItemClickListener )上注册一些侦听器,但没有一个被称为。
你可以知道可能出现什么问题吗?亲切的问候 Mirec
答案 0 :(得分:1)
尝试从
开始 alarmList.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.add(0, ENTRY_ADD, 1, "Add");
menu.add(0, ENTRY_REMOVE , 2,"Remove");
}});
如果它不起作用,请从XML中删除所有不必要的属性,例如android:clickable
- 使用最少的工作示例,然后找出导致问题的原因。
答案 1 :(得分:1)
尝试将此属性添加到复选框:
focusable="false"
答案 2 :(得分:1)
mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
return false;
}
});
记得在函数结尾处返回false&#39; onItemLongClick&#39;。如果你返回ture,系统会认为函数&#39; onItemLongClick&#39; &#34;吃&#34;长篇大论。
答案 3 :(得分:0)
在将setClickable(true)方法设置为true
之前,ListView不会处理长按listviewobject.setClickable(真)
答案 4 :(得分:0)
迟到的答案,但它可能会帮助某人。 在我的情况下,上下文菜单没有显示,因为我的列表适配器有稳定的ID。
删除以下块解决了问题:
@Override
public boolean hasStableIds() {
return true;
}