2012-11-26 63 views
0

我正在開發一個應用程序。在一個頁面中有很多複選框。我想在退出頁面時保存CheckBox的狀態。我使用SharedPreferrences來保存。代碼是這樣的:無法在Android中保存CheckBox的狀態

checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 
    public void onCheckedChanged(CompoundButton arg0, boolean isChecked) { 
// TODO Auto-generated method stub 
Editor editor = getSharedPreferences("syllabus", 0).edit(); 
editor.putBoolean("cbx1_ischecked", isChecked); 
editor.commit(); 
} 
    }); 
checkbox2.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 
    public void onCheckedChanged(CompoundButton arg0, boolean isChecked) { 
    // TODO Auto-generated method stub 
    Editor editor = getSharedPreferences("syllabus", 0).edit(); 
    editor.putBoolean("cbx2_ischecked", isChecked); 
    editor.commit(); 
    } 

}); 

當我離開這個頁面,然後再回來。所有複選框狀態都不會被選爲默認值。爲什麼?

+1

你在哪裏設置複選框? –

+0

你是如何設置'SharedPreferences'中的複選框值的。簡單你的情況。 'onPause()'(存儲SharedPreferences中的值)和'onResume()'(從SharedPreferences中獲取值)有效。 – user370305

+1

使用 myPrefs = getApplicationContext()。getSharedPreferences(「myPrefs」,MODE_WORLD_WRITEABLE)重新打開應用程序時獲取所有值。 並設置所有複選框值.. –

回答

2

您節省vallues但你必須恢復它們您在活動開始時是這樣的:

SharedPreferences prefs = getSharedPreferences("syllabus", 0); 
checkbox1.setChecked(prefs.getBoolean("cbx1_ischecked" ,false)); 
checkbox2.setChecked(prefs.getBoolean("cbx2_ischecked" ,false)); 
+0

我認爲這是正確的答案,應該被接受。 –

1

試試這個

boolean check1,check2; 
checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 
public void onCheckedChanged(CompoundButton arg0, boolean isChecked) { 
// TODO Auto-generated method stub 
    check1=isChecked; 

} 
}); 

checkbox2.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 
public void onCheckedChanged(CompoundButton arg0, boolean isChecked) { 
// TODO Auto-generated method stub 
check2=isChecked; 

} 

}); 

//store boolean only once when you leave the activity 
Editor editor = getSharedPreferences("syllabus", 0).edit(); 
editor.putBoolean("cbx1_ischecked", check1); 
editor.putBoolean("cbx2_ischecked", check2); 
editor.commit(); 


In onCreate() 

    SharedPreferences prefs = getSharedPreferences("syllabus", 0); 
    checkbox1.setChecked(prefs.getBoolean("cbx1_ischecked" ,false)); 
    checkbox2.setChecked(prefs.getBoolean("cbx2_ischecked" ,false));