Reputation: 619
I have read the instructions at the android developers page's in order to get the Checkable menu items:
http://developer.android.com/guide/topics/ui/menus.html
this is my xmlmenu:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="all">
<item android:id="@+id/regu"
android:title="@string/Regulatory" />
<item android:id="@+id/warn"
android:title="@string/Warning" />
<item android:id="@+id/temp"
android:title="@string/Temporary" />
<item android:id="@+id/bicy"
android:title="@string/Bicycle" />
</group>
</menu>
And here is my code:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.regu:
if (item.isChecked())
{
item.setChecked(false);
currAvailableOptions++;
}
else if(0 != currAvailableOptions)
{
item.setChecked(true);
currAvailableOptions--;
}
return true;
case R.id.warn:
if (item.isChecked())
{
item.setChecked(false);
currAvailableOptions++;
}
else if(0 != currAvailableOptions)
{
item.setChecked(true);
currAvailableOptions--;
}
return true;
case R.id.temp:
if (item.isChecked())
{
item.setChecked(false);
currAvailableOptions++;
}
else if(0 != currAvailableOptions)
{
item.setChecked(true);
currAvailableOptions--;
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.app_menu, menu);
return true;
}
The problem is when I clicked one item, the menu item disappeared. It wouldn't have to stay visible in order to check other menu items?
Any idea?
Greetings
Upvotes: 7
Views: 7545
Reputation: 12900
Checkable items appear only in submenus or context menus.
And with submenu they (Google) means:
Submenu A floating list of menu items that appears when the user touches a menu item that contains a nested menu.
Since your menu items are not submenu items, it will not work
Upvotes: 3
Reputation: 124
You should probably add break; statements after each case:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
item.setChecked(!item.isChecked());
break;
case R.id.item2:
item.setChecked(!item.isChecked());
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
Upvotes: -1
Reputation: 137382
I know this is not a direct answer to your question but please consider the following code instead of your switch, it might help you find the problem.
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.regu:
case R.id.warn:
case R.id.temp:
if (item.isChecked())
currAvailableOptions++;
else if(currAvailableOptions != 0)
currAvailableOptions--;
item.setChecked(!item.isChecked());
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Upvotes: 2
Reputation: 13062
What is currAvailableOptions? I looked at the article you linked to and there wasn't anything about that in there. It would seem that all you need to do is check:
if (item.isChecked())
item.setChecked(false);
else
item.setChecked(true);
or at least that's what the tutorial says. Perhaps you should give it another read? Hope this helps.
Upvotes: 0