使用SimpleCursorAdapter时,ContextMenu不会出现在ListView上

时间:2011-10-10 14:03:28

标签: android listview contextmenu simplecursoradapter

我是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

5 个答案:

答案 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;
}