动态上下文菜单选项

时间:2010-06-17 18:51:02

标签: android

是否可以在android中创建动态上下文菜单?

我的意思是,例如,如果我有一个项目列表,可以处于两种状态:“读取”和“未读”。我希望能够显示一个上下文菜单,其中包含未读项目的“标记为已读”选项,以及读取项目的“标记为未读”。

点击:

> read
> unread <-- click
> read 

将显示上下文菜单“Mark as Read”,结果为:

> read
> read
> read   <-- click

将显示“标记为未读”菜单。

是否有一些功能允许我在显示之前自定义上下文菜单的创建?

欢迎任何帮助!

2 个答案:

答案 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);
}

直接从代码设置文本(尤其是阅读文本)很脆弱;文本可能会改变,如果你想支持多种语言怎么办?