0

我正在开发一个 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 的新手,所以,任何帮助将不胜感激。

4

3 回答 3

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")

否则你比较参考。

于 2013-09-24T11:27:38.217 回答
1

您应该使用共享首选项而不是 getPreferences 在活动之间共享首选项。

来自 Android 文档:http: //developer.android.com/reference/android/app/Activity.html

Activity 持久状态通过 getPreferences(int) 方法进行管理,允许您检索和修改与 Activity 关联的一组名称/值对。要使用跨多个应用程序组件(活动、接收器、服务、提供者)共享的首选项,您可以使用底层的 Context.getSharedPreferences() 方法来检索存储在特定名称下的首选项对象。(请注意,无法跨应用程序包共享设置数据——因为您需要一个内容提供者。)

于 2013-09-24T11:46:21.177 回答
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);
于 2013-09-24T11:34:57.823 回答