我正在以编程方式使用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,没有任何帮助。
答案 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);
}
}
希望这对帮助我的人有所帮助。