我正在开发一个Android应用程序,该应用程序分为两个男性和女性。用户选择它想要进行的活动的哪个部分。例如,如果用户是男性,则选择男性部分,如果是女性,则单击女性按钮,然后显示女性页面。
为了避免打扰用户,我放了一个复选框,我说下次记得我的选择。很常见......
我尝试使用共享首选项,但它不起作用。每次应用程序打开时它都会询问问题。以下是代码:
我提出问题的活动
View checkBoxView = View.inflate(this, R.layout.activity_menu, null);
CheckBox checkBox = (CheckBox) checkBoxView.findViewById(R.id.checkbox);
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
SharedPreferences.Editor prefEditor = getPreferences(MODE_PRIVATE).edit();
prefEditor.putString("Remember", "Checked");
prefEditor.commit();
}
}
});
决定提问或打开所选活动之前的启动活动
SharedPreferences sp = getPreferences(MODE_PRIVATE);
String str1 = sp.getString("Remember", "");
String str2 = sp.getString("Hacc", "");
if (str1 == "") {
Intent menuIntent = new Intent(
"com.uygulama.hacc.MenuActivity");
startActivity(menuIntent);
}
else{
if(str2 == "Hacc" ){
Intent mainIntent = new Intent(
"com.uygulama.hacc.HaccActivity");
startActivity(mainIntent);
}
else{
Intent mainIntent = new Intent(
"com.uygulama.hacc.UmreActivity");
startActivity(mainIntent);
}
}
我是Android的新手,所以,任何帮助将不胜感激。
答案 0 :(得分:1)
我猜你正在使用2种不同的活动来编写和阅读共享偏好。如果您从getPreferences
致电Activity
,则会打开与该活动相关联的偏好设置。尝试将对首选项的访问权限更改为:
// read
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String str1 = settings.getString("Remember", "");
// write
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = settings.edit();
editor.putString("Remember", "Checked");
editor.commit();
此外,在比较字符串时,请使用equals
:
str2.equals("Hacc")
否则你比较参考。
答案 1 :(得分:1)
您应该使用共享首选项而不是getPreferences来共享活动之间的首选项。
来自Android doc: http://developer.android.com/reference/android/app/Activity.html
使用该方法管理活动持久状态 getPreferences(int),允许您检索和修改一组 与活动关联的名称/值对。要使用偏好 在多个应用程序组件之间共享(活动, 接收者,服务,提供者),你可以使用底层 Context.getSharedPreferences()方法用于检索首选项对象 以特定名称存储。 (请注意,无法共享 跨应用程序包设置数据 - 为此你需要一个 内容提供商。)
答案 2 :(得分:0)
您在第一堂课中的保存缺少了SharedPreferences中的命名空间。
尝试类似:
SharedPreferences prefs = getSharedPreferences("AppName", MODE_PRIVATE);
prefs.edit().putBoolean("Remember", true).commit();
并使用以下命令检索它:
SharedPreferences sPrefs = getSharedPreferences("AppName", 0);
Boolean bCheck = sPrefs.getBoolean("Remember", false);