我正在尝试以编程方式设置在 onOptionsItemSelected(MenuItem item)函数内检查的单选按钮, 但它不工作,应用程序崩溃!
MenuItem thisItem;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int opState = 4; //--- Just a test: can be 1-4, ie check Button 4.
thisItem = menu.findItem(R.id.menu1); //--- Uncheck all buttons ---
thisItem.setChecked(false);
thisItem = menu.findItem(R.id.menu2);
thisItem.setChecked(false);
thisItem = menu.findItem(R.id.menu3);
thisItem.setChecked(false);
thisItem = menu.findItem(R.id.menu4);
thisItem.setChecked(false);
我假设上面将所有按钮设置为未选中状态。我在真实设备上测试它,因此无法运行任何诊断。下面检查opState的值并设置相应的菜单开关:
switch (opState) {
case 1:
thisItem = menu.findItem(R.id.menu1);
thisItem.setChecked(true);
break;
case 2:
thisItem = menu.findItem(R.id.menu2);
thisItem.setChecked(true);
break;
case 3:
thisItem = menu.findItem(R.id.menu3);
thisItem.setChecked(true);
break;
case 4:
thisItem = menu.findItem(R.id.menu4);
thisItem.setChecked(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.activity_main_actions, menu);
this.menu = menu;
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.menu1:
item.setTitle("1");
if (item.isChecked()) item.setChecked(false);
else item.setChecked(true);
return true;
case R.id.menu2:
item.setTitle("2");
if (item.isChecked()) item.setChecked(false);
else item.setChecked(true);
return true;
case R.id.menu3:
item.setTitle("3");
if (item.isChecked()) item.setChecked(false);
else item.setChecked(true);
return true;
case R.id.menu4:
item.setTitle("4");
if (item.isChecked()) item.setChecked(false);
else item.setChecked(true);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
以下是上述菜单文件:
<?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/menu1"
android:checked="true"
android:orderInCategory="1"
android:showAsAction="never"
android:title="@string/menu1"/>
<item
android:id="@+id/menu2"
android:orderInCategory="2"
android:showAsAction="never"
android:title="@string/menu2"/>
<item
android:id="@+id/menu3"
android:orderInCategory="3"
android:showAsAction="never"
android:title="@string/menu3"/>
<item
android:id="@+id/menu4"
android:orderInCategory="4"
android:showAsAction="never"
android:title="@string/menu4"/>
</group>
</menu>
opState值在Name中设置,如下所示:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
SharedPreferences.Editor editor = sharedpreferences.edit();
switch (item.getItemId()) {
case R.id.menu1:
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
editor.putInt(Name, 1);
editor.apply();
item.setChecked(!item.isChecked());
break;
答案 0 :(得分:0)
请尝试一下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
private int getMenuIdByIndex(int index) {
// index from 1
switch (index) {
case 1:
return R.id.menu1;
case 2:
return R.id.menu2;
case 3:
return R.id.menu3;
case 4:
return R.id.menu4;
}
return 0;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main_actions, menu);
int savedIndex = PreferenceManager.getDefaultSharedPreferences(this).getInt("NAME", 1);
for (int i = 1; i < 5; i++) {
MenuItem item = menu.findItem(getMenuIdByIndex(i));
if (item != null) {
item.setChecked(i == savedIndex);
}
}
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.menu1:
item.setTitle("1");
item.setChecked(!item.isChecked());
PreferenceManager.getDefaultSharedPreferences(this).edit().putInt("NAME", 1).apply();
return true;
case R.id.menu2:
item.setTitle("2");
item.setChecked(!item.isChecked());
PreferenceManager.getDefaultSharedPreferences(this).edit().putInt("NAME", 2).apply();
return true;
case R.id.menu3:
item.setTitle("3");
item.setChecked(!item.isChecked());
PreferenceManager.getDefaultSharedPreferences(this).edit().putInt("NAME", 3).apply();
return true;
case R.id.menu4:
item.setTitle("4");
item.setChecked(!item.isChecked());
PreferenceManager.getDefaultSharedPreferences(this).edit().putInt("NAME", 4).apply();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}