2012-12-12 81 views
3

我有一個選項卡,主機帶有三個活動,每個活動我有按鈕。安卓:共享偏好不保存按鈕的狀態

在每次按下按鈕,我改變的背景繪製資源

所以現在我怎麼能保存每個按鈕的按下狀態在所有三個子活動,這樣,當我從一個活動轉移到其它的按鈕按下的狀態將在移回時反映出來。第一個活動 - >全部2個按鈕按下 - >去第二個活動 - >回到第一個活動 - >第一個活動中的所有按鈕都應該處於按下狀態,並且可繪製資源已更改

我有兩個背景圖片。

按鈕按壓 - >反白標明的背景圖像 - >第二時間按下相同的按鈕 - >變爲正常的背景圖像

第一次時我運行該應用程序和如果我按下按鈕的背景圖像得到改變。如果我去第二個孩子的活動和回來使按鍵與改變繪製資源按下狀態。所以它的精細

第二次如果我按下同一按鈕,並從第二個活動回來的同樣的活動。在這裏它不工作

第一個孩子活動 - >按按鈕 - >高亮背景圖像的變化 - >去第二tabhost子活動 - >回來的第一個孩子活動 - >按鈕顯示按下後,相同的背景圖片(這是罰款)

問題是

現在你按下第一個孩子的活動相同的按鈕 - >背景圖像更改爲正常 - >去第二tabhost子活動 - >回來的第一個孩子活動 - >但按鈕背景資源爲突出,而不是正常的

和夏娃ñ如果我再次運行應用程序的按鈕顯示highligted背景圖像

下面的代碼,我用我的第一個孩子活動

EDITED

public void onResume() { 
    super.onResume(); 
    SharedPreferences sharedPreferences = this.getSharedPreferences(
      "sharedPreferences", MODE_PRIVATE); 

    int which = sharedPreferences.getInt("sharedPreferences", 1); 
    switch (which) 
    { 
     case 1: 
      seatdirnbtn.setBackgroundResource(R.drawable.icon4); break; 
     case 2: 
      seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt); break; 
     default: 
      seatdirnbtn.setBackgroundResource(R.drawable.icon4); break; 
    } 
} 

public void onPause() { 
    super.onPause(); 
    boolean isclick = false; 
    SharedPreferences sharedPreferences = this.getSharedPreferences(
      "sharedPreferences", MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 

    if (isclick) { 
     seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt); 

     editor.putInt("sharedPreferences", 2).commit(); 
    } 
} 

EDIT2

 public static boolean isclick = false; 
private View.OnClickListener listner1 = new View.OnClickListener() { 

    public void onClick(View v) { 

    if (isclick) { 
      seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt); 

     } else { 
      seatdirnbtn.setBackgroundResource(R.drawable.icon4); 
     } 

     isclick = !isclick; 
    } 

}; 
+0

它看起來像你的'onPause'上有把'int' 2到SharedPrefs的條件,但從來沒有把1 – mango

+0

坦言即時不解的機會。你設置一個布爾值來總是讀取'false',這就解釋了爲什麼一部分條件沒有運行。你必須使它對應於點擊按鈕的時間。然而,你是說這是總是運行的*真實*部分?此外,我認爲這是更好的處理簡單的布爾標誌(也許是一個數組)來切換。和應用程序離開時的SharedPrefs。 – mango

+0

謝謝,我明白了你的意思,但是因爲我是android的新手,我沒有得到任何想法如何正確地實現這一點。你可以用標誌來處理這個問題。 – Randroid

回答

0

試試這個變化:

if (isclick) { 
     seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt); 
     editor.clear(); 
     editor.putInt("sharedPreferences", 2).commit(); 
    } 
else { 
     seatdirnbtn.setBackgroundResource(R.drawable.icon4); 
     editor.clear(); 
     editor.putInt("sharedPreferences", 1).commit(); 
} 
+0

謝謝,但它不適合我 – Randroid

+0

你是否清楚isclick? –

+0

啊!有沒有在你的設置圖像切換! –

0

這裏就是我的意思:

boolean[] btnBool = new boolean[2]; // number of buttons 

private View.OnClickListener listner1 = new View.OnClickListener() { 
    public void onClick(View v) { 
     toggleBtn(0); //zero refers to which index of the array for button button 
     setDrawables(); 
    } 

}; 

public void onResume() { 
    super.onResume(); 
    toggleAllBtns(); 
    setDrawables(); 
} 

private void toggleBtn(int index) { 
    if(btnBool[index]) { 
     btnBool[index] = false; 
    } else { 
     btnBool[index] = true; 
    } 
} 

private void toggleAllBtns() { 
    // first switch the values of the array 
    for (int i = 0; i < btnBool.length; i++) { 
     if(btnBool[i]) { 
      btnBool[i] = false; 
     } else { 
      btnBool[i] = true; 
     } 
    }  
} 

private void setDrawables() { 
    // then set drawables based on values 
    if (btnBool[0]) { 
     seatdirnbtn.setBackgroundResource(R.drawable.icon4); 
    } else { 
     seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt); 
    } 
} 
+0

非常感謝。但遺憾的是,當我第一次單擊按鈕時,它獲取突出顯示的圖像,並恢復它的反射,因爲我想要的tabhost兒童活動,但如果我再次點擊同一個按鈕,它應該顯示正常的圖像,但它的一旦我暫停並重新開始活動(我的意思是在參加第二個孩子的活動並回到第一個孩子的活動中)時,我會展現出高調。如果我第二次有任何不同的狀況檢查,請點擊同一個按鈕。 – Randroid

+0

我可以看到監聽器中發生了什麼?你在裏面改變'btnBool'嗎?如果所有內容都應該如此,請在設置背景資源之前再次嘗試查找相同的按鈕。 – mango

+0

Plz在上面的問題中檢查EDIT2。我只是改變背景圖像,我只是把你的代碼保存在onResume()中,甚至在按鈕seatdirnbtn的onclicklistner中。 – Randroid