Android可选子菜单选项

4
所以我有一个子菜单,用于选项菜单项。我希望有一个可勾选的条目列表,用户可以选择/取消选择他们想要的任意数量。唯一无法解决的问题是如何防止当复选框之一被点击时选项菜单关闭。我看到performShortcut有一个FLAG_PERFORM_NO_CLOSE标志,但我不确定如何使用该方法。我尝试了很多方法,但我对按键事件应该来自哪里或者这是否是我应该查看的正确方法感到困惑。
所以简而言之:我如何防止选项菜单/子菜单在选择选项时关闭?

从菜单处理程序中返回true/false可能会解决问题。请检查您的菜单处理程序。 - Pentium10
我尝试从onOptionsItemSelected返回false,但没有起作用。 - Falmarri
True是默认返回值。但这并没有起作用,所以我尝试了false。行为相同。 - Falmarri
我认为返回值并不会影响菜单的关闭。它只是一个信号,表示是否成功选择了菜单项。我不确定菜单选项是否像你描述的那样工作。你考虑过打开一个带有选项的对话框,而不是使用子菜单吗? - Cheryl Simon
嗯,这似乎是一个完全合理的做法。这样做可能会更好,因此我不必使用onPrepareOptionsMenu来更改复选框。但我相当确定选项菜单可以像这样工作。显然,大多数人只是用对话框的简单方式来完成它。 - Falmarri
1个回答

0
我处理这个问题的方式是使用标准的警告对话框类。在您的菜单处理程序中,创建一个AlertDialog并将选项数组传递给Builder。
您应该注意的方法是AlertDialog.Builder.setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, DialogInterface.OnMultiChoiceClickListener listener) 将一个数组传递给此方法,并将子菜单选择代码放入ClickListener中。

这种方法是否比创建全新的活动并在清单中将其声明为对话框,然后自己创建检查列表视图更受欢迎?我知道这样做需要更多的工作,而且我知道如何做两者。但是,其中一个选择明显比另一个更好吗? - Falmarri
@Falmarri 如果你只需要一个文本项列表,那么标准的AlertDialog就是最好的选择。不过你应该通过Activity的ShowDialog()方法来实现。这样可以为你处理很多线程和控制问题。 - CodeFusionMobile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接