2014-03-04 65 views
2
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ib1= (ImageButton) findViewById(R.id.imageButton1); 
     getpref(); 
     ib1.setOnClickListener(new OnClickListener() { 
      public void onClick(View arg0) { 
       if(sound==true){ 
        sound=false; 
        ib1.setImageResource(R.drawable.volume); 
       } 
       else{ 
        sound=true; 
        ib1.setImageResource(R.drawable.vol); 
       } 
      } 
     }); 
    }; 
    public void getpref() { 
     SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE); 
     Boolean sh_sound = prefs.getBoolean("key", true); 
     sound=sh_sound; 
     if(sh_sound==true){ 
      SharedPreferences pref = this.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE); 
      Editor editor = pref.edit(); 
      editor.putBoolean("key", sh_sound); 
      editor.commit(); 
      checkpref(sh_sound); 
     } 
     else{ 
      SharedPreferences pref = this.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE); 
      Editor editor = pref.edit(); 
      editor.putBoolean("key", sh_sound); 
      editor.commit(); 
      checkpref(sh_sound); 
     } 
    } 
    public void checkpref(Boolean sh_sound) { 
     if(sh_sound== true){ 
      ib1.setImageResource(R.drawable.vol); 
     } 
     else{ 
      ib1.setImageResource(R.drawable.volume); 
     } 
    } 

我想保存圖片點擊的首選項,當我重新打開活動時,上一次選擇的選擇應該在那裏,但我無法存儲首選項,它會在我重新打開時顯示默認圖像。無法保存圖片點擊共享首選項?

默認視圖

選擇圖像存儲的偏好後

重新開放活動

回答

1

我沒有測試代碼,但你的邏輯錯了。您沒有在點擊時保存偏好設置。

Boolean sound; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ib1= (ImageButton) findViewById(R.id.imageButton1); 
    getpref(); 
    ib1.setOnClickListener(new OnClickListener() { 
     public void onClick(View arg0) { 
      if(sound==true){ 
       sound = false; 
       ib1.setImageResource(R.drawable.volume); 
      } else{ 
       sound = true; 
       ib1.setImageResource(R.drawable.vol); 
      } 
      setSoundChecked(sound); 
     } 
    }); 
}; 

void setSoundChecked(Boolean checked) { 
    SharedPreferences pref = this.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE); 
    Editor editor = pref.edit(); 
    editor.putBoolean("key", checked); 
    editor.commit(); 
} 

public void getpref() { 
    SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE); 
    Boolean sh_sound = prefs.getBoolean("key", true); 
    sound = sh_sound; 
    checkpref(sh_sound); 
} 

public void checkpref(Boolean sh_sound) { 
    if(sh_sound== true){ 
     ib1.setImageResource(R.drawable.vol); 
    } 
    else{ 
     ib1.setImageResource(R.drawable.volume); 
    } 
} 
+1

您可以將'setSoundChecked(sound)'移出if-else。 – rusmus

+0

當然。沒有注意到。謝謝。 –

0

也叫getpref()方法無論是在按鈕onClick作爲最後陳述或活動onPause/OnStopSharedPreferences保存sh_sound最新值:

@Override 
public void onPause() 
{ 
     // call getpref() here.. 
    getpref(); 
    super.onPause(); 

} 
0

您在getprefs()方法,只叫Activity開始時寫你的首選項。當你點擊Button時你應該寫。

1

它看起來並不像你實際上試圖在click事件中保存偏好。嘗試更新點擊監聽器是這樣的:

ib1.setOnClickListener(new OnClickListener() { 
     public void onClick(View arg0) { 
      if(sound==true){ 
       sound=false; 
       ib1.setImageResource(R.drawable.volume); 
      } 
      else{ 
       sound=true; 
       ib1.setImageResource(R.drawable.vol); 
      } 

      SharedPreferences pref = getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE); 
      Editor editor = pref.edit(); 
      editor.putBoolean("key", sound); 
      editor.commit(); 
     } 
    }); 

除此之外,你似乎可以節省你剛纔讀裏面的值,你getpref(),你可以簡化這樣的:

public void getpref() { 
    SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE); 
    Boolean sh_sound = prefs.getBoolean("key", true); 
    sound=sh_sound;  

    checkpref(sh_sound);   
} 
+0

我們無法在覆蓋方法onClick中調用getSharedPreferences方法。 – Shubhankar

+0

我的錯誤。是的,您可以在clicklistener內部調用getSharedPreferences,您只需刪除'this'reference或將其更改爲'YourClassName.this.getSharedPreferences(...)'調用。更新答案以刪除'this'參考。 – rusmus