获取ContextMenu项目ID

时间:2014-05-28 14:28:32

标签: android database contextmenu android-contentprovider android-cursor

我有一个简单的布局,文本视图很少。这里我要做的是定义一个名称,并使用contentProvider将其保存到数据库中。然后,从数据库中读取此名称并显示在textView上。

这是我第一次获取保存在数据库中的项目:

Cursor c = getContentResolver().query(TravelersProvider.CONTENT_URI, PROJECTION, null, null, null);

投影是:

String[] PROJECTION = {Travelers._ID, Travelers.NAME};

现在我需要做的是:

  • 创建contextMenu,当我点击带有名称的textview时,我可以编辑或删除它。

这是我将contextMenu注册到TextView的方式:

txtView1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        registerForContextMenu(v);
    }
});

然后我创建它:

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    getMenuInflater().inflate(R.menu.context_menu, menu);
}

最后我定义了触摸时要做的事情:

@Override
public boolean onContextItemSelected(MenuItem item) {
    //TODO:
}

这是我需要帮助的地方。基本上,我需要做的是:

  • 定义哪个元素是我所触及的元素。这应该获得一个索引。
  • 获取光标并将其移动到该位置。

1 个答案:

答案 0 :(得分:1)

onCreateContextMenu挂钩中,有一个View参数。在此参数上调用getId()以确定哪个TextView调用了上下文菜单。然后,您可以将其存储到要在onContextItemSelected中使用的类变量中。

private int contextViewId;

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    getMenuInflater().inflate(R.menu.context_menu, menu);
    contextViewId = v.getId();
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    // use contextViewId
}