使用ContextMenuInfo的null值调用onCreateContextMenu

时间:2009-11-11 23:14:03

标签: android listview cursor

我正在尝试使用ContextMenu 我使用SimpleCursorAdapter成功完成了一个简单的ListActivity 继续我想用CursorAdapter替换SimpleCursorAdapter但仍保留ContextMenu行为,所以我添加了两个强制覆盖函数bindView和newView

public View newView(Context context, Cursor cursor, ViewGroup parent) {
    View view = mLayoutInflater.inflate(R.layout.check_row, parent, false);
    registerForContextMenu(view);
    return view;
}

请注意registerForContextMenu,它替换了ListActivity的onCreate方法中的registerForContextMenu(getListView())。我发现有必要调用onCreateContextMenu(...)

所有这些都有效(使用预期的小部件创建的行,对它们进行回调等等)。除了提供给onCreateContextMenu(...)的ContextMenuInfo参数现在为空之外的一切 - 停止我访问rowId。 还有其他技巧要做 - 可能是在CursorAdapter的bindView(...)方法中吗?

2 个答案:

答案 0 :(得分:2)

我正在回答这个问题 - 但我会指出'commonsware.com'提供了线索和方向,见上文。
问题
  - 在行布局中使用CheckBox会影响上下文菜单的使用   - 我相信CheckedTextView是用于多选的,它不适合初始化已检查状态。

我采用的解决方案如下  1.使用CheckedTextView
 2.从CursorAdapter扩展到bindView(...)期间初始化检查状态 注意:这必须管理显示正确的图标  3.在onListItemClick(...)中管理CheckedTextView的状态并将其记录在dBase中,不要忘记更新光标。

答案 1 :(得分:1)

这不是正确的做法。您注册ListView的上下文菜单,而不是行。预先调用registerForContextMenu(),可能在onCreate()充气后放置{。}}。