动态上下文菜单选项
问题描述:
是否有可能在android中创建动态上下文菜单?动态上下文菜单选项
我的意思是,例如,如果我有一个项目列表,可以有两种状态:“读取”和“未读”。我希望能够为未读项目提供一个选项“标记为已读”的上下文菜单,并且为已读项目标记“未读”。
所以点击:
> read
> unread <-- click
> read
将显示上下文菜单 “标记为已读”,造成:
> read
> read
> read <-- click
将显示菜单中的 “标记为未读”。
是否有一些函数可以让我在显示前自定义上下文菜单的创建?
欢迎任何帮助!
答
由于你没有提供的代码,这是基本的方法:
@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
s表示可以有串“读”或“未读”。正如我已经说过的,这是一个非常基本的方法。这里重要的是注意如何使用ContextMenu.ContextMenuInfo
对象。
此外,要读取所选项目的状态,可以使用onContextItemSelected(MenuItem item)
方法中的item.getMenuInfo()
方法。
答
我会做到这一点的方法是创建两个单独的菜单项,“标记为已读”和“标记为未读”,然后隐藏其中的一个,每当显示菜单:
@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);
}
设置直接来自代码的文本(特别是阅读文本)是脆弱的;文字可能会改变,如果您想支持多种语言,该怎么办?
.targetView成员代表什么?谢谢! – drozzy 2010-06-18 12:01:26
在Android上构建列表时,列表中的每个项目都是“视图”。您可以使用不同类型的视图,例如简单的'TextView'(如上例)或自定义视图(例如,将外部布局转换为带有'LinearLayout'的XML,不同的'TextView',Images,等等)。 'targetView'表示您正在用来显示列表中的每个项目的'View'。 – Cristian 2010-06-18 12:35:28