2013-10-07 40 views
1

我正在從用戶獲取IP,端口和設備名稱設置並在初始化對象時使用它們。但是,當我把設置,這些設置沒有得到更新的應用程序,直到我重新啓動應用程序。首選項沒有得到更新,直到應用程序重新啓動

這裏是我的設置文件 -

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     addPreferencesFromResource(R.layout.settings); 

     SharedPreferences sp = getPreferenceScreen().getSharedPreferences(); 
     EditTextPreference editTextPrefLAN = (EditTextPreference) findPreference("prefABCLan"); 
     editTextPrefLAN 
       .setSummary(sp.getString("prefABCLan", "Set your LAN IP")); 





     EditTextPreference editTextPrefPort = (EditTextPreference) findPreference("prefABCPort"); 
     editTextPrefPort 
       .setSummary(sp.getString("prefABCPort", "Set your port")); 
     EditTextPreference editTextPrefDeviceName = (EditTextPreference) findPreference("prefABCDeviceName"); 
     editTextPrefDeviceName 
       .setSummary(sp.getString("prefABCDeviceName", "Set your device name")); 

     /*EditTextPreference editTextPrefScopeIP = (EditTextPreference) findPreference("prefScopeIP"); 
     editTextPrefScopeIP 
       .setSummary(sp.getString("prefScopeIP", "Set your Scope IP")); 
     EditTextPreference editTextPrefScopeLogin = (EditTextPreference) findPreference("prefScopeLogin"); 

*/ 


    } 

    protected void onResume() { 
     super.onResume(); 
     getPreferenceScreen().getSharedPreferences() 
       .registerOnSharedPreferenceChangeListener(this); 
    } 

    protected void onStop() { 
     super.onStop(); 
     getPreferenceScreen().getSharedPreferences() 
       .registerOnSharedPreferenceChangeListener(this); 
    } 

    protected void onPause() { 
     super.onPause(); 
     getPreferenceScreen().getSharedPreferences() 
       .unregisterOnSharedPreferenceChangeListener(this); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.actionbar, menu); 

     return true; 
    } 

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
              String key) { 
     Preference pref = findPreference(key); 
     if (pref instanceof EditTextPreference) { 
      EditTextPreference etp = (EditTextPreference) pref; 
      pref.setSummary(etp.getText()); 
     } 
    } 

有什麼我需要在我的代碼呢?

+0

首先,你如何確定「這些設置沒有得到更新的應用程序」?其次,你的清單中是否有任何'android:process'屬性? – CommonsWare

+0

@CommonsWare最初我在我的應用程序中輸入錯誤的IP。然後,我正在更改IP地址,並從使用這些首選項的應用內的其他活動發送數據。但活動仍在使用Old Prefs而不是New Prefs。再次,如果我重新啓動我的應用程序,數據將使用新設置發送。 –

+0

@CommonsWare爲什麼我需要清單中的流程條目? –

回答

1

當用戶修改PreferenceActivity中的首選項時,您仍然需要在應用中的其他位置使用這些首選項。如果您較早閱讀偏好設置,並且現在需要更改的值,則情況尤其如此。

一種方法就是重新加載的喜好,把你的喜好讀邏輯生命週期方法類似onResume()將被稱爲當活動/片段創建時後返回到屏幕都用戶訪問了PreferenceActivity

另一種方法是在其他組件中使用OnSharedPreferenceChangeListener,就像您在此處使用它一樣。關注偏好變化的活動(或片段或其他)會註冊OnSharedPreferenceChangeListener並觀察相關更改。

相關問題