Android 如何在前台PreferenceFragment中更改SharedReference时更新后台片段?

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)

我最近开发了一个游戏,其中包含一个名为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,并返回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);