共享偏好项目存储
问题描述:
我重新发布这个问题,因为我仍然坚持这一点。共享偏好项目存储
所以我正在创建一个简单的android应用程序。我有一个菜单项,其中有3个复选框。只要我的应用程序启动,用户可以从给定的复选框中选择一个或多个。但是,我想保存用户选择以供进一步参考。我使用共享首选项为其中的一个复选框实现了这一目标,但如果选中多个复选框,则无法实现此目的。这是我的代码:
public class MainActivity extends AppCompatActivity {
static Switch swch;
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);
}
}
如何使用共享首选项来实现所有开关箱选项?
谢谢。
答
更新您的两种方法 - onCreateOptionsMenu
和onOptionsItemSelected
,如下所示。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
SharedPreferences settings = getSharedPreferences("settings", 0);
boolean red = settings.getBoolean("red", false);
boolean blue = settings.getBoolean("blue", false);
boolean green = settings.getBoolean("green", false);
MenuItem item = menu.findItem(R.id.color1);
MenuItem item1 = menu.findItem(R.id.color2);
MenuItem item2 = menu.findItem(R.id.color3);
item.setChecked(red);
item1.setChecked(blue);
item2.setChecked(green);
//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.color1:
item.setChecked(!item.isChecked());
editor.putBoolean("1", item.isChecked());
editor.commit();
return true;
case R.id.color2:
item.setChecked(!item.isChecked());
editor.putBoolean("2", item.isChecked());
editor.commit();
return true;
case R.id.color3:
item.setChecked(!item.isChecked());
editor.putBoolean("3", item.isChecked());
editor.commit();
return true;
case R.id.item_accessibility_services:
startActivity(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
+0
@Thomas任何理由取消选择这个答案? –
+0
对不起,只是我错误地选择了这个答案。 – Thomas
您需要使用与复选框不同的键来将其保存为其他项目。您希望如何保存数据,以及您想如何检索和使用它。 –
@Kapil G我希望无论用户选择了哪个复选框,即使我在应用程序被终止后重新打开,选择仍然存在。我发布的上面的代码可以用于第一个复选框。但是,即使用户选择了多个复选框,我也希望数据仍然存在。 – Thomas
然后将每个复选框的值保存到不同的密钥中,然后在打开活动时获取所有密钥,并根据每个密钥中存储的值设置复选框 –