2013-02-12 39 views
0

我有一个onOptionItemSelected()检查问题。我在onOptionItemSelected()建立了一个菜单,有2个菜单组,第一组只有1个子菜单,第二组有3个子菜单。我想要改变子菜单上点击它时的检查。但我尝试了很多次,但是我做不到。在Android的选项菜单中检查车削

如果我点击了一个子菜单,它的检查结果会改变,但其他检查结果不会改变。谁能帮我 ?

我将所有检查事项保存到共享首选项。

任何人都知道任何关于访问onOptionItemSelected()中的其他项目检查对象?

谢谢你,对不起我的英语。

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    String ringerString = mSharedPrefs.getString("ringer", SOR_STRING); 
    boolean ringer = false; 
    if (ringerString == SOR_STRING) { 
     ringer = true; 
    } 
    String ayarString = mSharedPrefs.getString("ayar", "ikisi"); 
    boolean ayarIkisi = false, ayarMesaj = false, ayarArama = false; 
    if (ayarString == "ikisi") { 
     ayarIkisi = true; 
    } else if (ayarString == "mesaj") { 
     ayarMesaj = true; 
    } else if (ayarString == "arama") { 
     ayarArama = true; 
    } 
    SubMenu mMenu = menu.addSubMenu("Settings").setIcon(
      android.R.drawable.ic_secure); 
    mMenu.add(1, 11, 0, SOR_STRING).setCheckable(true).setChecked(ringer); 
    menu2 = menu.addSubMenu("Mesaj ve Arama Seçenekleri").setIcon(
      android.R.drawable.sym_action_chat); 
    menu2.add(2, 12, 0, "Mesajlarda cevapla").setCheckable(true) 
      .setChecked(ayarMesaj); 
    menu2.add(2, 13, 0, "Aramalarda cevapla").setCheckable(true) 
      .setChecked(ayarArama); 
    menu2.add(2, 14, 0, "Her ikisinde de cevapla").setCheckable(true) 
      .setChecked(ayarIkisi); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    RunningServices runningServices = new RunningServices(); 
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    String ringerString = mSharedPrefs.getString("ringer", SOR_STRING); 
    boolean ringer = false; 
    if (ringerString == SOR_STRING) { 
     ringer = true; 
    } 

    switch (item.getItemId()) { 
    case 11: 
     if (ringer) { 
      Log.v("menu sor", "giriş"); 
      if (!runningServices.isRingerRunnig(manager)) { 
       try { 
        startService(new Intent(MainActivity.this, 
          RingerService.class)); 
       } catch (Exception e) { 
        // TODO: handle exception 
        Log.v("start service", "ringer service start hatası"); 
       } 
       doShared("ringer", SORMA_STRING); 
       item.setChecked(true); 
       // setMenuTitle(mSharedPrefs.getString("ringer", 
       // SOR_STRING), 
       // item); 
       Log.v("menu", item.getTitle().toString()); 
       progresislemi(); 
       return true; 
      } 
     } else { 
      Log.v("menu sorma", "giriş"); 
      // if (runningServices.isRingerRunnig(manager)) { 
      try { 
       stopService(new Intent(MainActivity.this, 
         RingerService.class)); 
      } catch (Exception e) { 
       // TODO: handle exception 
       Log.v("stop service", "ringer service stop hatası"); 
      } 
      doShared("ringer", SOR_STRING); 
      item.setChecked(false); 
      // setMenuTitle(mSharedPrefs.getString("ringer", SOR_STRING), 
      // item); 
      Log.v("menu", item.getTitle().toString()); 
      progresislemi(); 
      return true; 
      // } 
     } 
     return true; 
    case 12: 
     doShared("ayar", "mesaj"); 
     Toast.makeText(getApplicationContext(), 
       mSharedPrefs.getString("ayar", "mesaj"), Toast.LENGTH_LONG) 
       .show(); 
     menuIslemi(); 
     item.setChecked(true); 
     return true; 
    case 13: 
     doShared("ayar", "arama"); 
     Toast.makeText(getApplicationContext(), 
       mSharedPrefs.getString("ayar", "mesaj"), Toast.LENGTH_LONG) 
       .show(); 
     menuIslemi(); 
     item.setChecked(true); 
     return true; 
    case 14: 
     doShared("ayar", "ikisi"); 
     Toast.makeText(getApplicationContext(), 
       mSharedPrefs.getString("ayar", "mesaj"), Toast.LENGTH_LONG) 
       .show(); 
     menuIslemi(); 
     item.setChecked(true); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

回答

0

我建议在onPrepareOptionsMenu()而不是onCreateOptionsMenu()中设置菜单项。这将在每次访问时动态重建菜单,以便修改后的校验值将被正确显示。

@Override 
public boolean onPrepareOptionsMenu(Menu menu) {...}