我最近开发了一款游戏,其中包含一个名为GameOver的片段来显示用户名和最终版。 GameOver片段有一个按钮,允许用户更改其名称。通过单击该按钮,用户将被定向到名为SettingsFragment的PreferenceFragment以更改他/她的名称。相对偏好是EditTextPreference。
以下是用于弹出PreferenceFragment的按钮的代码:
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。用户名显示在TextView中。代码很简单,可能没有必要发布它。
我想要的是在SettingsFragment中更改用户名后进行TextView更新并返回GameOver片段。有人能告诉我如何完成这项工作吗?
答案 0 :(得分:1)
工作几个小时后,最终解决了。解决方案非常简单,只需使用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);