是否可以在android中创建动态上下文菜单?
我的意思是,例如,如果我有一个项目列表,可以处于两种状态:“读取”和“未读”。我希望能够显示一个上下文菜单,其中包含未读项目的“标记为已读”选项,以及读取项目的“标记为未读”。
点击:
> read
> unread <-- click
> read
将显示上下文菜单“Mark as Read”,结果为:
> read
> read
> read <-- click
将显示“标记为未读”菜单。
是否有一些功能允许我在显示之前自定义上下文菜单的创建?
欢迎任何帮助!
答案 0 :(得分:5)
由于您不提供代码,这是基本方法:
@Override
public void onCreateContextMenu(ContextMenu contextMenu,
View v,
ContextMenu.ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info =
(AdapterView.AdapterContextMenuInfo) menuInfo;
String actionString = "Mark as Read";
// if it's alredy read
if ( ((TextView) info.targetView).getText().toString().equals("read") )
actionString = "Mark as Unread";
menu.setHeaderTitle("Action");
menu.add(0, 0, 0, actionString);
}
在这种情况下,我假设列表中填充了TextView
个,其中包含“read”或“unread”字符串。正如我已经说过的,这是一种非常基本的方法。这里重要的是要注意ContextMenu.ContextMenuInfo
对象是如何被使用的。
此外,要阅读所选项目的状态,您可以使用item.getMenuInfo()
方法中的onContextItemSelected(MenuItem item)
方法。
答案 1 :(得分:1)
我这样做的方法是创建两个单独的菜单项,“标记为已读”和“标记为未读”,然后在显示菜单时隐藏其中一个:
@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);
if (<is unread>)
menu.findItem(R.id.mark_unread).setVisible(false);
else
menu.findItem(R.id.mark_read).setVisible(false);
}
直接从代码设置文本(尤其是阅读文本)很脆弱;文本可能会改变,如果你想支持多种语言怎么办?