5

我正在尝试使用 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(...) 方法中?

4

2 回答 2

2

我正在回答这个问题——但我要指出,“commonsware.com”提供了线索和方向,见上文。

问题

  • 在行布局中使用 CheckBox 会影响上下文菜单的使用
  • 我相信 CheckedTextView 是用于多选的,它不适合初始化选中状态。

我采用的解决方案如下

  1. 使用 CheckedTextView
  2. 从 CursorAdapter 扩展以在 bindView(...) 期间初始化选中状态
    注意:这也必须管理显示正确的图标
  3. 在 onListItemClick(...) 中管理 CheckedTextView 的状态并将其记录在 dBase 中,不要忘记更新光标。
于 2009-11-15T11:38:31.327 回答
1

这不是正确的做法。ListView您为 而不是行注册上下文菜单。registerForContextMenu()提前打电话,也许在onCreate()你膨胀布局之后。

于 2009-11-12T02:11:42.357 回答