共享首选项存储

时间:2017-08-16 11:52:38

标签: android sharedpreferences

所以我正在为教育目的创建一个简单的android应用程序。我有一个菜单项,其中有3个复选框。一旦我的应用程序启动,用户就可以从给定的复选框中选择一个或多个。但是,我想保存用户选择以供进一步参考。我使用共享首选项为其中一个复选框实现了此功能,但如果选中了多个复选框,则无法实现此目的。这是我的代码:

 public class MainActivity extends AppCompatActivity {
    static Switch swch;
    static TextView onOffBar;
    public static boolean red = false;
    public static boolean blue = false;
    public static boolean green = false;

    private static final String TAG = "MainActivity";

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        SharedPreferences settings = getSharedPreferences("settings", 0);
        boolean isChecked = settings.getBoolean("checkbox", false);

        MenuItem item = menu.findItem(R.id.red);
//        MenuItem item1 = menu.findItem(R.id.blue);
//        MenuItem item2 = menu.findItem(R.id.green);
        item.setChecked(isChecked);
//        item1.setChecked(isChecked);
//        item2.setChecked(isChecked);
        //return super.onCreateOptionsMenu(menu);
        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        SharedPreferences settings = getSharedPreferences("settings", 0);
        SharedPreferences.Editor editor = settings.edit();
        switch (item.getItemId()) {
            case R.id.red:
                item.setChecked(!item.isChecked());

                editor.putBoolean("checkbox", item.isChecked());
                editor.commit();
                return true;
            case R.id.blue:
                item.setChecked(!item.isChecked());

                editor.putBoolean("checkbox", item.isChecked());
                editor.commit();
                return true;
            case R.id.green:
                item.setChecked(!item.isChecked());

                editor.putBoolean("checkbox", item.isChecked());
                editor.commit();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

如何使用共享首选项为所有开关案例选项实现此目的?

感谢。

2 个答案:

答案 0 :(得分:0)

如果这不是你的意思我道歉。但基本上你是在正确的轨道上,你只需要为你想要保存的每个布尔值输入一个不同的键并进行检查。此外,最佳做法是为首选项使用更具描述性的键,而不是像"复选框"这可以适用于任何尝试使用描述符的东西,这样你就可以更好地跟踪并记住它的长远目的。

     @Override
    public boolean onOptionsItemSelected(MenuItem item) {
                SharedPreferences settings = getSharedPreferences("settings", 0);
                SharedPreferences.Editor editor = settings.edit();
        switch (item.getItemId()) {
            case R.id.red:
                item.setChecked(!item.isChecked());

                editor.putBoolean("red", item.isChecked());
                editor.commit();
                return true;
                Case R.id.blue:
                item.setChecked(!item.isChecked());
                Blue1 = item.isChecked();
                editor.putBoolean("blue", Blue1);
                editor.commit();
                return true;
            case R.id.green:
                item.setChecked(!item.isChecked());
                Green1=item.isChecked();
                editor.putBoolean("green", Green1);
                editor.commit();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

答案 1 :(得分:-2)

您可以使用Gson存储模型对象。

public class CheckboxData {
    boolean personalize_permissions;
    boolean add_tanslucent_layer;
    boolean integrate_flowInfo;
}

在build.gradle中添加以下内容

compile 'com.google.code.gson:gson:2.7'

创建CheckboxData的对象并根据您的复选框选择填充它。

CheckboxData data = new CheckBoxData();
data.setPersonalize_permissions(true);
data.setIntegrate_flowInfo(true);

Gson gson = new Gson();
String json = gson.toJson(data);
prefsEditor.putString("CheckBoxPrefs", json);

检索时

Gson gson = new Gson();
String json = mPrefs.getString("CheckBoxPrefs", "");
CheckboxData prefData = gson.fromJson(json, CheckboxData.class);

根据prefData值设置所选复选框。