2013-02-12 30 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) {...}