Android 如何在前台PreferenceFragment中更改SharedReference时更新后台片段?
我最近开发了一个游戏,其中包含一个名为GameOver的片段,用于显示用户名和最终版本。GameOver片段有一个按钮,允许用户更改其名称。单击该按钮,用户将被引导到名为SettingsFragment的PreferenceFragment以更改其名称。相对首选项是EditTextPreference 以下是弹出PreferenceFragment的按钮代码:Android 如何在前台PreferenceFragment中更改SharedReference时更新后台片段?,android,android-fragments,android-preferences,Android,Android Fragments,Android Preferences,我最近开发了一个游戏,其中包含一个名为GameOver的片段,用于显示用户名和最终版本。GameOver片段有一个按钮,允许用户更改其名称。单击该按钮,用户将被引导到名为SettingsFragment的PreferenceFragment以更改其名称。相对首选项是EditTextPreference 以下是弹出PreferenceFragment的按钮代码: Button changeName = (Button) rootView.findViewById(R.id.change_name)
Button changeName = (Button) rootView.findViewById(R.id.change_name);
changeName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
SettingsFragment settingsFragment = new SettingsFragment();
ft.replace(R.id.play_game_container, settingsFragment);
ft.addToBackStack(null);
ft.commit();
}
});
PreferenceFragment还有一个按钮,允许用户返回到上一个片段,代码为:
Button button = (Button)rootView.findViewById(R.id.move_to_previous);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager().popBackStackImmediate();
}
});
GameOver片段中有一个文本视图。用户名显示在文本视图中。代码非常简单,可能不需要发布
我想要的是在设置片段中更改用户名后更新TextView,并返回GameOver片段。有人能告诉我怎么做吗?工作了几个小时后,问题终于解决了。解决方案非常简单,只需使用OnSharedPreferenceChangeListener,以下是代码:
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
score_board.setText(PreferenceManager.getDefaultSharedPreferences(getActivity()).getString("name", "Anonymous")
+ "\r\n" + "Your Score: " + Integer.toString(score));
}
};
mSharedPreferences.registerOnSharedPreferenceChangeListener(listener);