片段中设置的共享首选项,主要活动Android中的访问权限

时间:2014-05-03 13:20:36

标签: android android-activity fragment sharedpreferences

我在片段中设置了一个sharedpreference值。但是当我尝试在主要活动中访问该值时,我总是得到默认值;(请告诉我为什么......

片段:

    reader= this.getActivity().getSharedPreferences("pref",0); // this is in onCreate

            //this part within a onClick
    editor = reader.edit();
    editor.putBoolean(Preferences.passwordOn, true); 
    editor.putString(Preferences.password, editTextPassword.getText().toString()); 
    editor.commit();

在主要活动中:

    boolean passwordOn = reader.getBoolean(Preferences.passwordOn, false);
    if(passwordOn)
    {
        Intent loginIntent=new Intent("com.sdg.etspandroidtracker.LOGIN");
        startActivity(loginIntent);
    }

更新:我的代码太杂乱了。 :(所以我会告诉那里发生了什么。

在主要活动中,首先我检查是否为应用程序设置了密码。如果是这样,我在第二个代码部分显示登录屏幕并结束上面给出的主要活动。另外,我只是保持主要活动。

在设置中,我切换到开/关密码。当我在交换机上时,会显示一个片段,您可以在其中输入新密码和密码确认。如果所有详细信息都正确,则密码和密码状态(设置密码时的信息)将保存在共享首选项中。这段代码是我上面给出的第一个代码部分。

我可以在密码上成功运行应用程序并进行设置。但是当我再次运行应用程序时,不会显示登录屏幕。我调试并发现这是因为sharedpreference是空的并且即使我上次运行应用程序时设置了密码也提供了默认值“false”。似乎我无法在主要活动中访问我在片段中设置的共享偏好? :\

3 个答案:

答案 0 :(得分:1)

If you want to communicate from an activity to a fragment, you can use EventBus and send a message that can be intercepted. But if your code is messy it may be not a good idea...

答案 1 :(得分:0)

您应该在MainActivity中调用 if-block 。因为如果您在fragment中设置新值之前调用 if-block ,则会获得旧值。您能否提供更多代码,例如何时调用 if-block 以及片段实际执行的内容或何时创建?

答案 2 :(得分:0)

我也遇到了同样的问题,但解决方案并不是那么简单。我使用Butterknife绑定资源值(在这种情况下,键作为字符串)。

当使用不同活动中的字符串以共享首选项调用时,它始终使用默认值。直接使用字符串可以使它工作。