如何在前台PreferenceFragment中更改SharedPreferences时更新背景片段?

时间:2014-10-27 08:39:56

标签: android android-fragments android-preferences

我最近开发了一款游戏,其中包含一个名为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片段。有人能告诉我如何完成这项工作吗?

1 个答案:

答案 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);