amc*_*ish 4 android contextmenu
我有一个按钮,打开一个上下文菜单,其中包含各种选项列表.一次只能选择一个选项,所以我希望每个选项旁边都有一个单选按钮,突出显示当前选择的项目.当我从上下文菜单中选择一个项目时,单选按钮被选中并关闭.单击按钮打开上下文菜单后,未选择先前选择的项目.
如何让上下文菜单记住之前选择的项目?
其次,首次创建活动时,会选择默认选项.如何设置初始默认值,然后在选择另一个上下文菜单项时可以覆盖该默认值?我可以android:checked="true"在XML中设置,但是当选择不同的项目时可以覆盖它吗?
Java的:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.browse);
Button buttonView = (Button) this.findViewById(R.id.button_view);
buttonView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
registerForContextMenu(v);
openContextMenu(v);
}
});
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle(R.string.menu_title);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()) {
case(R.id.item1):
if(item.isChecked()) {
item.setChecked(false);
} else {
item.setChecked(true);
}
break;
case(R.id.item2):
if(item.isChecked()) {
item.setChecked(false);
} else {
item.setChecked(true);
}
break;
case(R.id.item3):
if(item.isChecked()) {
item.setChecked(false);
} else {
item.setChecked(true);
}
break;
default:
return super.onContextItemSelected(item);
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
XML:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@+id/context_menu" android:checkableBehavior="single">
<item android:id="@+id/item1"
android:title="@string/context_menu_item1" />
<item android:id="@+id/item2"
android:title="@string/context_menu_item2" />
<item android:id="@+id/item3"
android:title="@string/context_menu_item3" />
</group>
</menu>
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
ask*_*msk 15
问题是您的项目不会在显示菜单之间保存状态.因此,每次调用setChecked时,它仅适用于当前显示的菜单,并重置为下一个菜单.
您应该将检查状态保存在外部结构中,例如布尔数组.
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle(R.string.menu_title);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
// loop for menu items
for (int i = 0; i < menu.size(); ++i) {
MenuItem mi = menu.getItem(i);
// check the Id as you wish
if (mi.getItemId() == R.id.item2) {
mi.setChecked(true);
}
}
}
Run Code Online (Sandbox Code Playgroud)
为了搜索菜单项,您还可以使用findItem函数:
MenuItem mi = menu.findItem(R.id.item2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6942 次 |
| 最近记录: |