簡體   English   中英

程序關閉時如何使復選框保持選中狀態?

[英]how to make checkbox stay checked when program closes?

在我的程序中,我有大約20個復選框,但是當我選中它們並關閉程序然后再返回到復選框時,它們始終處於未選中狀態,如何使該復選框保持選中狀態。

在onPause函數中,將狀態寫入文件或SharedPreference。 在您的onResume中,讀入該文件/首選項並設置復選框。 您可能需要查看PreferenceActivity為您執行此操作。

您可以使用SharedPreferences執行此操作。

因此,首先,當您的應用程序轉到onPause ,您需要將每個復選框的狀態存儲在SharedPreferences

SharedPreferences prefs = this.getSharedPreferences("com.example.myapp", Context.MODE_PRIVATE);
prefs.putBoolean("checkbox1", checkbox1.isChecked()).commit();
// do this for all 20

然后,您可以選中onResumeonCreate復選框:

checkbox1.setChecked(prefs.getBoolean("checkbox1", false));

您應該考慮使用“ 共享首選項”

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

寫入共享首選項:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

從共享首選項中讀取

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);

這也是關於實現它們的非常簡單的教程

要求的示例代碼:

主要活動類別:

package com.zeus.example;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.widget.CheckBox;

public class MainActivity extends Activity {

CheckBox chkBox1, chkBox2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    chkBox1 = (CheckBox) findViewById(R.id.checkBox1);
    chkBox2 = (CheckBox) findViewById(R.id.checkBox2);

    SharedPreferences getPrefs = 
            PreferenceManager.getDefaultSharedPreferences(getBaseContext());

    boolean value = getPrefs.getBoolean("checkbox_preference", true);
    chkBox1.setSelected(value); // Setting the value reflected from the preference
    chkBox2.setSelected(!value); // Setting the value opposite of the preference(Just an example)
}
}

偏好活動類別:

package com.zeus.example;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class Prefs extends PreferenceActivity{

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       // TODO Auto-generated method stub
       super.onCreate(savedInstanceState);
       addPreferencesFromResource(R.xml.settings);
   }
}

設置XML:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
        xmlns:android="http://schemas.android.com/apk/res/android">
        <CheckBoxPreference
               android:key="checkbox_preference"
               android:defaultValue="false"
              android:title="CheckBox1"
        />
</PreferenceScreen>

盡管此方法很簡單,但不建議使用,建議改用Preference Fragments

使用SharedPreferences 永久存儲小值的最簡單方法。

由於您有多個復選框,請使用SharedPreferences.Editor putStringSet(字符串鍵,Set <String>值)

您可以使用SimpleSharedPreferencesputStringSet是回遷到API-1。

用法:無編輯,無提交。

SimpleSharedPreferences mPreferences = new SimpleSharedPreferences(getApplicationContext()); //Init.

mPreferences.putStringSet("STRING_SET_KEY", mStringSet); //Single Line 

mPreferences.getStringSet("STRING_SET_KEY", null); // Get String set.

mPreferences.putBoolean("INTEGER_BOOL", true); //Just an example.

注意:我是SimpleSharePreferences的作者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM