Android:上下文菜单和在上下文菜单中选择的项
这是onCreate和oncontextitemslected代码Android:上下文菜单和在上下文菜单中选择的项,android,Android,这是onCreate和oncontextitemslected代码 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater();
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
Toast toast;
if(item.getItemId() == R.id.context_menu_edit)
{
Log.d("ContextCheck","EDIT!");
toast = Toast.makeText(this, "Edit!", Toast.LENGTH_SHORT);
toast.show();
}
if(item.getItemId() == R.id.context_menu_delete)
{
Log.d("ContextCheck","DELETE!");
toast = Toast.makeText(this, "Delete!", Toast.LENGTH_SHORT);
toast.show();
}
return super.onContextItemSelected(item);
}
在此之前,我使用了方法registerForContextMenu(event\u list)
其中event\u list
是一个列表视图,不,我不知道为什么每次我从上下文菜单中单击一个项目时,它什么都不做,它不会显示toast,也不会登录到logcat。。。选项Menu和ContextManu的item.getItemId()是否相同?。。我不知道我的代码出了什么问题
PS
在列表视图的对话框中调用上下文菜单您需要在中返回true,如文档中所述: 返回 必须返回true才能显示菜单;如果你 返回false将不显示它 因此,您可以将代码更改为:
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
return true;
}
更新:
我在选项菜单上返回了一个开关盒,它位于onoptionItemSelected
vsonContextItemSelected
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.emaildev:
email();
break;
case R.id.share:
Share();
break;
}
return true;
}
图标和ID都在我的菜单中。xml如果您不介意在类中创建菜单项,这是您的解决方案。关键字肯定是你的PS,这意味着你的listview在一个对话框中
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
//MenuInflater inflater = getMenuInflater();
//inflater.inflate(R.menu.context_menu, menu);
MenuItem delete = menu.add("delete");
MenuItem add = menu.add("add");
add.setIcon(android.R.drawable.ic_menu_upload); //adding icons
delete.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
Log.d("ContextCheck","EDIT!");
Toast.makeText(Pr.this, "Edit!", Toast.LENGTH_SHORT).show();
return true;
}
});
add.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
Log.d("ContextCheck","EDIT!");
Toast.makeText(Pr.this, "Edit!", Toast.LENGTH_SHORT).show();
return true;
}
});
}
你甚至不需要
onContextItemSelected
方法。是的,尽管我没有返回true,但我仍然在上下文菜单上获得了选项,但当我单击上下文菜单中的项目时,它不会做任何事。顺便问一下,当某个内容无效时,你如何返回?是的,但是这些内容将如何在上下文菜单上实现,我的选项菜单很好用。。只是在我的ContextMenu上,当我单击ContextMenuse上的某个项时,我什么也不做。请参阅此帖子:,需要向onContextItemSelected方法添加一个int arg。我不明白,为什么你说需要在声明为void的方法中返回true?这不正确,与解决方案无关。请检查我编辑的答案。我让它和一个对话框一起工作。是的,它工作得很好!。。非常感谢你!。。但是有一个问题,为什么它不能与listview上对话框上下文的正常实现一起工作?…我想说onContextItemSelected可以用于顶级类,如活动,并且对话框是派生类。然而,根据开发人员的网站,包名是android.app.Activity和android.app.Dialog,所以我不知道。请删除你的第一条评论,因为它现在无关紧要。