【问题标题】:sharedPreferences is not working to between two fragment?sharedPreferences 在两个片段之间不起作用?
【发布时间】:2018-02-16 23:25:59
【问题描述】:
片段 1:
SharedPreferences sPrefs = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sPrefs.edit();
editor.putString("name", "testnameJack");
editor.commit();
片段 2:
SharedPreferences sPrefs = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
String data= sPrefs.getString("name", "err");
emailId.setText(data);
我想在两个片段之间传输数据但不工作
【问题讨论】:
标签:
java
android
android-fragments
sharedpreferences
【解决方案1】:
试试:
SharedPreferences sPrefs = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
String data= sPrefs.getString("name","No name defined");
emailId.setText(data);
【解决方案2】:
这不是它的工作原理。如果您在两个片段都在屏幕上时更新SharedPreferences...他们怎么知道偏好已经改变。有两种方法可以轻松解决这个问题:
1) 将OnSharedPreferenceChangeListener 添加到您尝试更新的片段的首选项中。当侦听器检测到更改时,您可以更改文本。在您的情况下,片段 2. 例如:
sPrefs.registerOnSharedPreferenceChangeListener(
new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// .. Check the key to see if its the one you are looking for then set the text
}
});
不要忘记取消注册监听器以避免泄漏。
2) 在父 Activity 或 Fragment 中实现一个接口,并从 Fragment 2 中的 Activity 调用一个公共方法。
见docs
祝你好运,编码愉快!
【解决方案3】:
答案:
//设置偏好
SharedPreferences myPrefs = getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
SharedPreferences.Editor prefsEditor;
prefsEditor = myPrefs.edit();
//strVersionName->Any value to be stored
prefsEditor.putString("STOREDVALUE", strVersionName);
prefsEditor.commit();
//获取偏好
SharedPreferences myPrefs;
myPrefs = getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
String StoredValue=myPrefs.getString("STOREDVALUE", "");
谢谢大家:)