2014-09-01 79 views
0

嘿,我想讓我的複選框每次打開我的應用程序時保持相同的狀態..我用'ja/nein'字符串,當我關閉串狀態,然後再次打開我的應用程序...但我checkbox.setchecked(真/假)不工作..請幫助Sharedpreferences不起作用,當我關閉/打開應用程序時,複選框應該保持相同狀態

public void changeVisitStatus(){ 
    SharedPreferences visitStatus = mData.getVisitStatus(); 
    SharedPreferences.Editor editor = visitStatus.edit(); 

    if(visitStatus.getString(mData.getVisitKey(), "nein").equals("nein")){ 
     editor.putString(mData.mVisitKey, "ja"); 
     editor.commit(); 
     mGUI.mBtnVisit.setChecked(true); 
    } 
    else{ 
     editor.putString(mData.mVisitKey, "nein"); 
     editor.commit(); 
     mGUI.mBtnVisit.setChecked(false); 
    } 
    mGUI.getVisitStatus().setText(visitStatus.getString(mData.mVisitKey, "Nein")); 
} 

編輯:我嘗試了另一種方式。 。我認爲它會更好,但不工作以及..

public void changeVisitStatus(){ 
    SharedPreferences visitStatus = mData.getVisitStatus(); 
    SharedPreferences.Editor editor = visitStatus.edit(); 

    if(visitStatus.getString(mData.getVisitKey(), "nein").equals("nein")){ 
     editor.putString(mData.mVisitKey, "ja"); 
     editor.putBoolean("isChecked", true); 
     editor.commit(); 

    } 
    else{ 
     editor.putString(mData.mVisitKey, "nein"); 
     editor.putBoolean("isChecked", false); 
     editor.commit(); 

    } 
    mGUI.getVisitStatus().setText(visitStatus.getString(mData.mVisitKey, "Nein")); 
} 

並把這一個到我的onCreate(捆綁s avedInstanceState)在我的活動

mGUI.mBtnVisit.setChecked(mData.getVisitStatus().getBoolean("isChecked", false)); 

回答

0

嘗試這樣的:

public void putBooleanInPreferences(boolean isChecked,String key){ 
     SharedPreferences sharedPreferences = this.getPreferences(Activity.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putBoolean(key, isChecked); 
     editor.commit();   
    } 
    public boolean getBooleanFromPreferences(String key){ 
     SharedPreferences sharedPreferences = this.getPreferences(Activity.MODE_PRIVATE); 
     Boolean isChecked = sharedPreferences.getBoolean(key, false); 
     return isChecked;  
    } 

中的onCreate 和()

CheckBox checkBox = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     checkBox = (CheckBox) findViewById(R.id.my_check_box); 
     boolean isChecked = getBooleanFromPreferences("isChecked"); 
     Log.i("start",""+isChecked); 
     checkBox.setChecked(isChecked); 
     checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton view, boolean isChecked) { 
       Log.i("boolean",""+isChecked); 
       TestActivity.this.putBooleanInPreferences(isChecked,"isChecked"); 
      } 
     }); 
    } 

希望這可以幫助你!

+0

默認值應該是false – eldjon 2014-09-01 10:32:29

+0

@Krupa Patel謝謝!我嘗試了你的代碼,但仍然沒有像我想象的那樣工作...檢查 - 'ja'...未檢查 - '否'... :(( – PeterP 2014-09-01 13:27:20

0

您只向我們顯示更改狀態的代碼,可能是從OnClick偵聽器調用的複選框。

您還應該添加僅從SharedPreferences中讀取狀態並根據該狀態設置複選框狀態的代碼(可以是相同的代碼,但if條件否定)。

您需要從OnCreate事件調用該代碼。

public void setVisitStatus(){ 
    SharedPreferences visitStatus = mData.getVisitStatus(); 
    mGUI.getVisitStatus().setText(visitStatus.getString(mData.mVisitKey, "Nein")); 
} 
+0

不,我沒有OnClick偵聽器爲我的複選框。可以處理任何有關changig狀態(如果這狀態 - 所以複選框將狀態呢?)我不明白你只是讀狀態和設置複選框狀態是什麼意思?...你是指第一次嘗試或編輯?@velis – PeterP 2014-09-01 11:36:19

+0

對不起 - 當然我得到了一個onClick監聽器..大聲笑 – PeterP 2014-09-01 11:56:31

+0

如何從SharedPreferences中只讀取satus ..對不起,我的問題..我只是一個初學者,並嘗試學習 – PeterP 2014-09-01 12:16:25

相關問題