在LinearLayout中检索已打开上下文菜单的TextView的id

时间:2013-02-16 19:13:52

标签: android

我正在以编程方式使用TextViews填充LinearLayout,其中我根据从数据库和用户首选项填充的实体放置文本。

我现在正尝试在每个TextView上添加一个上下文菜单,以允许用户删除该特定条目(从而删除对象,从而删除db行)。

我可以长时间按下来打开一个上下文菜单,但我看不到获取与菜单相关的TextView的id。

几乎关于这个引用ListViews的所有信息(我没有使用 - 在ScrollView中有一个ListView存在问题),并且很多引用Adapters(我没有使用,数据需要是在呈现之前彻底按摩。)

LinearLayout以XML格式指定。我正在AsyncTask的onPostExecute中添加TextViews,我在其中进行数据库查找。

我尝试以两种方式注册上下文菜单:Activity.registerForContextMenu(TextView)和textView.setOnCreateOptionsMenuListener(new ...)。

问题在于以下部分:

@Override
public boolean onContextItemSelected(MenuItem item) {
    ContextMenuInfo info = (ContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()) {
        case R.id.delete_entry:
              // how do I get the TextView id here???
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}

ContextMenuInfo变量为null,没有任何帮助。

1 个答案:

答案 0 :(得分:0)

这个问题的一个答案来自阅读get view id from oncontextitemselected

虽然有点hacky,但确实有效,现在也没关系。

您确实将View变量作为onCreateContextMenu方法中的参数。然后将该变量存储在具有类范围的其他变量中是非常简单的,您可以在onContextItemSelected方法中使用它。

示例:

private TextView contextTextView = null;

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.tankbeurt_wissen, menu);
    contextTextView = (TextView) v;
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.delete_entry:
                System.out.println(contextTextView.getId()+" called this method");
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}

希望这对帮助我的人有所帮助。