我是Android的初学者,我对共享首选项实现有困惑。我的目标是在用户定义一些将在MainFragment中使用的文本时使用一个字符串。鉴于用户在运行应用程序时可能会更改该字符串,我还需要一个侦听器。所以根据迄今为止的一本书,我有一个SettingsActivity和一个SettingsFragment。Android SharedPreferences混淆
SettingsActivity至今:
public class SettingsActivity extends AppCompatActivity {
private SharedPreferences prefs;
private String stringIWantToSave;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
getFragmentManager().beginTransaction().
replace(android.R.id.content, new SettingsFragment(), "settings_fragment").commit();
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
}
@Override
protected void onResume() {
super.onResume();
stringIWantToSave = prefs.getString("stringIWantToSave", "myString");
}
}
SettingsFragment至今:
public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
private SharedPreferences sharedPreferences;
private String stringIWantToSave;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
}
@Override
public void onPause() {
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
super.onPause();
}
@Override
public void onResume() {
super.onResume();
sharedPreferences.getString("stringIWantToSave", "myString");
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
}
}
我的问题是:
•在哪一种方法,我应该如何保存在用户更改的价值?
•如何实现侦听器,以便它通知MainFragment字符串已更改?
这些都是班设置活动和片段,你可能不会需要他们。我不知道你在做什么,但是如果你知道用户什么时候可以改变这个字符串,你可以在它后面检查它是否有变化。 SharedPreferences可用于所有Activity和Fragment类。 – fapps
@fapps我想提供用户改变的能力让我们说他的名字。我决定放置一个菜单,并在菜单内放置一个标签,其中EditTextPreference将允许用户写下他的名字。这就是为什么我创建了这些类。 – kDoyle
因此,如果您在xml布局中使用EditTextPreference,只需使用'key =“stringIWantToSave”'设置键值,并且您可以完成所有需要的操作。没有额外的代码。 – fapps