2012-01-31 51 views

回答

5

您可以使用SharedPreferences來實現CheckBox,即使應用程序已關閉,它仍保留其狀態。

  • 當用戶檢查/取消選中CheckBox.Save它的狀態在共享 首選項。
  • 每當用戶打開您的活動。從 共享首選項中讀取先前保存的值,並設置複選框的狀態。

這裏是一個示例代碼來保存複選框的狀態,即使應用程序已關閉。

public class TestActivity extends Activity{ 
    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"); 
      } 
     }); 
    } 
    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;  
    } 
} 

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <CheckBox 
     android:id="@+id/my_check_box" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

</LinearLayout> 
1

你最好的選擇是在應用程式SharedPreferences並保存它的狀態。當您運行您的應用程序時,您可以從首選項中檢索狀態並選中/取消選中該複選框。

1

爲了記住應用程序的狀態,你將要使用的onSaveInstanceState()onRestoreInstanceState()方法(見本answer獲取更多信息),以確定盒子應該選中或不選中...

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    savedInstanceState.putBoolean("IsCheckboxChecked", _myCheckbox.isChecked()); 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    _myCheckbox.setChecked(savedInstanceState.getBoolean("IsCheckboxChecked")); 
} 
+0

上面的代碼是否足以獲得我想要的?我應該如何將它應用到我的複選框? – hectichavana 2012-01-31 14:14:12

+1

請參閱'_myCheckbox.setChecked'它將狀態應用於複選框。 – Leandros 2012-01-31 14:19:35

+0

我已將這些片段應用於我的應用,但它不保存複選框'狀態 – hectichavana 2012-01-31 14:49:18

0

這是一個類似的帖子.. SO Qn您可以使用相同的想法。希望這可以幫助。

0

最好的辦法是使用SharedPreference。您可以使用它像這樣:

保存當前狀態sharedpreference:

SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPreferences.edit(); //opens the editor 
editor.putBoolean("isChecked", true); //true or false 
editor.commit(); //saves it in shared preference 

那麼當你的活動開始,你可以在SharedPreference像這樣的檢查值:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.yourlayout); 

    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 

    CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox_id); 
    checkBox.setChecked(sharedPreferences.getBoolean("isChecked", false)); 
} 

希望你可以使用這些信息

+0

因此,對於第一個片段,我應該制定一個方法或者什麼? – hectichavana 2012-01-31 14:38:24

+0

製作一種保存複選框狀態的方法。因此,每當用戶檢查或取消選中時,當前狀態都會保存。 然後,您可以檢查活動中的任何位置,如果最後一次已知狀態已選中或未選中。 – Fergers 2012-01-31 15:47:55

相關問題