2014-10-27 46 views
0

我最近開發了一個遊戲,其中包含一個名爲GameOver的片段來顯示用戶名和最終的。 GameOver片段有一個讓用戶更改名字的按鈕。通過點擊該按鈕,用戶將被定向到一個名爲SettingsFragment的PreferenceFragment來更改他/她的名字。相對偏好是EditTextPreference。如何在更改前臺PreferenceFragment中的SharedPreferences時更新背景片段?

以下是按鈕的代碼,彈出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中的用戶名並返回到GameOver片段之後進行TextView更新。有人能告訴我如何完成這項工作嗎?

回答

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