2013-02-13 88 views
0

我有一個MenuItem中的MenuItem,它有一個複選框,但當我旋轉設備時,複選框仍處於活動狀態,但標籤右側的圖標未選中。在旋轉事件中保留MenuItem複選框狀態

我想實現的是顯示旋轉設備後再次檢查該框。

到目前爲止,我一直試圖用SharedPreferences,flags,將「菜單」(從onCreateOptionsMenu)存儲到一個變量並尋找id,onPrepareOptionsMenu,但沒有做我想做的事情。

我現在正在做的是將MenuItem的狀態標誌存儲在「onOptionsItemSelected」上,然後在「onPrepareOptionsMenu」上檢查標誌的值並設置檢查...但是這會導致更多的麻煩。

我不知道該怎麼做。 :(

代碼:

private boolean lockFlag; 

... 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    this.menu = menu; 

    getSupportMenuInflater().inflate(R.menu.activity_main, menu); 

    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.menu_lock: 
     if (item.isChecked()) { 
      item.setChecked(false); 
      lockFlag = false; 
     } else { 
      item.setChecked(true); 
      lockFlag = true; 
     } 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    super.onPrepareOptionsMenu(menu); 
    if (lockFlag) { 
     menu.findItem(R.id.menu_lock).setChecked(true); 
    } else { 
     menu.findItem(R.id.menu_lock).setChecked(false); 
    } 

    return true; 
} 

private void savePrefs() { 
    getSharedPreferences("LOCKBARS", MODE_PRIVATE).edit().putBoolean("lockbars", lockFlag).commit(); 
} 

private void loadPrefs() { 
    this.lockFlag = getSharedPreferences("LOCKBARS", MODE_PRIVATE).getBoolean("lockbars", false); 
} 

編輯: 那些是什麼樣,我使用,我沒有手動設置任何圖標複選框

enter image description hereenter image description here

編輯2:

好吧,看起來像android:configChanges="orientation|screenSize"是伎倆,但它停止使用lay出於橫向模式,並使用defalut而不是。沒有「screenSize」的 和android:configChanges="orientation"什麼都不做。

編輯3:

無恥的汽車顛簸。我仍然卡住。 :(

回答

0

從我所經歷的,在我的清單文件中保留以下狀態:

「android:configChanges =」orientation | screenSize「/>

稍後再查看您的編輯。可能這是你在做什麼錯:

MenuItem's checked state is not shown correctly by its icon

+0

嗯......這部分幫助,看看頁面底部的新編輯。 – Deses 2013-02-14 00:16:45

0

看起來像一個共同的方向變化 - 狀態保存問題我已經有諸如以下鏈接提供者對於這個問題的大型解決方案,:

How to save state during orientation change in Android

Saving Activity state in Android

+0

我已經去過這些鏈接,並沒有做多好。 :(另外,我已經解釋過我的問題更好了 – Deses 2013-02-13 23:42:57

+0

@ecem關鍵是你**不應該**必須手動保存**視圖狀態**。將一個CheckBox放在佈局中並創建一個空活動有了它,狀態將被保留在不同的旋轉狀態,甚至是主頁按鈕按下並從最近選擇。 – TWiStErRob 2014-10-21 12:36:54