我在片段中设置了一个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”。似乎我无法在主要活动中访问我在片段中设置的共享偏好? :\
答案 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
绑定资源值(在这种情况下,键作为字符串)。
当使用不同活动中的字符串以共享首选项调用时,它始终使用默认值。直接使用字符串可以使它工作。