2011-09-15 8 views
0

我設置一些屬性是這樣的:Android的屬性沒有更新,在我PreferenceActivity的onCreate方法提交

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);  
SharedPreferences.Editor editor = preferences.edit(); 

editor.putBoolean("pref_mykey", true); 

editor.commit(); 

它似乎工作,但觀點是沒有更新,所以當我打開屬性的onCreate運行並更改值。然後我會看到屏幕上的「舊」值,直到我關閉並重新打開首選項屏幕,然後我看到新的屬性。

提交後,我已經嘗試過這樣的:

((BaseAdapter) getPreferenceScreen().getRootAdapter()).notifyDataSetChanged(); 

,但沒有任何效果。我仍然看到「舊」Prefs,直到我關閉並重新打開PreferenceActivity。

我在做什麼錯了?如何在onCreate方法中設置值之後刷新PreferenceActivity?

非常感謝您的幫助。

回答

1

這是我一整天的buggin,但終於找到了解決方案。 ((ListPreference))getPreferenceScreen()。findPreference(「key_of_preference_in_xml_file」))。setValue(code);

你的例子是一個布爾值,所以它將不得不根據它是什麼樣的偏好來改變。 ((CheckBoxPreference))getPreferenceScreen()。findPreference(「key_of_preference_in_xml_file」))。setChecked(true);

0

如果使用PreferenceFragment,則需要在活動中注入PreferenceScreen。

public class SettingsActivity extends Activity implements ScanFragment.OnFragmentInteractionListener { 

    private PreferenceScreen prefScreen; 

    public void setPreferenceScreen(PreferenceScreen prefScreen){ 
     this.prefScreen = prefScreen; 
    } 

    @Override 
    public void onFragmentInteraction(String scanContent) { 
     // commiting to editor retrieved from preference manager would not refresh view 
     EditTextPreference pref = (EditTextPreference)this.prefScreen.findPreference(getString(R.string.preference_url_key)); 
     pref.setText(scanContent); 
    } 

    public static class SettingsFragment extends PreferenceFragment { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      // Load the preferences from an XML resource 
      addPreferencesFromResource(R.xml.preferences); 
      ((SettingsActivity)this.getActivity()).setPreferenceScreen(this.getPreferenceScreen()); 
     } 
    } 
} 
相關問題