所以我正在为教育目的创建一个简单的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);
}
}
如何使用共享首选项为所有开关案例选项实现此目的?
感谢。
答案 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
值设置所选复选框。