在 ActionBar 中有两个单选组不起作用,但附加弹出菜单也不起作用 [英] Having two single-selection groups in ActionBar doesn't work, but attaching a pop up menu instead doesn't work either
问题描述
我正在编写一个 Android 应用程序,用户必须在其中选择在图表上显示的方式和内容.这些选项以两个单选菜单组(单选按钮)表示,这两个菜单组都应该可以从操作栏访问.
I am writing an Android app where the user must choose how and what to display on a graph. These options are expressed in two single-selection menu groups (radio buttons), both of which should be accessible from the action bar.
第一组工作正常.它添加在我的 ActionBar XML 的末尾,如下所示:
The first group works fine. It's added at the end of my ActionBar XML like this:
<group android:checkableBehavior="single" android:showAsAction="never" >
<item android:id="@+id/menu_choice_1" android:title="Choice 1" />
<item android:id="@+id/menu_choice_2" android:title="Choice 2" android:checked="true"/>
</group>
当我在第一个下面添加第二个
时,这两个合并到一个单选列表中.换句话说,两个列表中的选项会一起呈现,如果我选择第一个列表的选项,则无法从第二个列表中选择任何选项.
When I add a second <group>
below the first one, however, the two merge into one single-selection list. In other words, the options from both lists are rendered together and if I choose an option pertaining to the first list, I cannot choose anything from the second.
相反,我想要两个单独的列表单选按钮.我的下一个想法是在 ActionBar 中添加另一个按钮,当点击该按钮时,它会启动一个 弹出菜单.但是当我点击按钮时,我得到一个 IllegalStateException
,说我的没有锚点就不能使用 MenuPopupHelper".
Instead, I want two separate lists of radio buttons. My next idea was to add another button the ActionBar that, when clicked, would launch a pop-up menu. But when I click the button, I get an IllegalStateException
, saying that my "MenuPopupHelper cannot be used without an anchor".
这是我尝试的弹出菜单代码:
Here is my attempted pop-up menu code:
在我的 ActionBar XML 中:
In my ActionBar XML:
<item android:id="@+id/menu_openothermenu"
android:title="@string/openothermenustr"
android:showAsAction="always" />
我的新菜单 XML:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item android:id="@+id/menu_2_choice_1" android:title="@string/2_choice_1" />
<item android:id="@+id/menu_2_choice_2" android:title="@string/2_choice_2" android:checked="true"/>
</group>
</menu>
我的活动中的代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor;
switch (item.getItemId()) {
case R.id.openothermenu:
Menu m = (Menu) findViewById(R.menu.other_menu);
PopupMenu popup = new PopupMenu(this, findViewById(R.menu.main_menu));
popup.setOnMenuItemClickListener(this);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.other_menu, popup.getMenu());
/* This commented block doesn't work either, and prevents execution
// Restore saved chosen value
int chosen = settings.getInt(MENU_2_PREFS, -1);
switch(chosen)
{
case 1:
m.findItem(R.id.menu_1_choice_1).setChecked(true);
updateVisibleThings();
break;
default:
case 2:
m.findItem(R.id.menu_2_choice_2).setChecked(true);
updateOtherVisibleThings();
break;
}
*/
popup.show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onMenuItemClick(MenuItem item) {
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor;
switch(item.getItemId()) {
case R.id.menu_2_choice_1:
if (item.isChecked()) item.setChecked(false);
else item.setChecked(true);
updateVisibleThings();
// save chosen setting
editor = settings.edit();
editor.putInt(MENU_2_PREFS, 1);
editor.commit(); // Commit the edits!
return true;
case R.id.menu_2_choice_2:
if (item.isChecked()) item.setChecked(false);
else item.setChecked(true);
updateOtherVisibleThings();
// save chosen setting
editor = settings.edit();
editor.putInt(MENU_2_PREFS, 2);
editor.commit(); // Commit the edits!
return true;
default:
return true;
}
}
如何创建两组可检查的菜单项,使它们都附加到 ActionBar?
推荐答案
我找到了一种优雅的方法来解决这个问题,但不幸的是文档中没有.将以下代码添加到您的 ActionBar 菜单 XML:
I found an elegant way to solve this that was unfortunately not in the documentation. Add the following code to your ActionBar menu XML:
<item android:id="@+id/menu_openothermenu"
android:title="@string/openothermenustr"
android:showAsAction="always">
<menu>
<group android:checkableBehavior="single">
<item android:id="@+id/menu_2_choice_1" android:title="@string/2_choice_1" android:showAsAction="never" />
<item android:id="@+id/menu_2_choice_2" android:title="@string/2_choice_2" android:showAsAction="never" android:checked="true" />
</group>
</menu>
</item>
显示这样的菜单不需要额外的处理程序代码或弹出菜单实现.
No extra handler code or popup menu implementation is necessary for such a menu to appear.
这篇关于在 ActionBar 中有两个单选组不起作用,但附加弹出菜单也不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!