2017-02-08 5 views
1

変更された後に、共有設定である末尾のスラッシュをurlという名前で削除したいとします。設定値のフォーマットonSharedPreferenceChanged

正常に動作しているようですが、私のコードでは、すべてのEditTextPreferencesの値が変更された後、その概要を更新しています。

私の問題は、末尾のスラッシュがurlから削除されていても、プリファレンスアクティビティを閉じて再度開くまでEditTextPreferenceサマリーに変更が実際に表示されないということです。

apply()の代わりにcommit()を試してみましたが、役に立たなかった。

public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { 
    private static final String TAG = "SettingsFragment"; 

    @Override 
    public void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
     getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); 
     getPreferenceScreen().removePreference(findPreference("service_running")); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) { 
      Preference preference = getPreferenceScreen().getPreference(i); 
      updatePreference(preference); 
     } 
    } 

    @Override 
    public void onSharedPreferenceChanged (SharedPreferences sharedPreferences, String key) { 
     // remove trailing slashes from url 
     if (key.equals("url")) { 
      String value = sharedPreferences.getString(key, ""); 

      if (value.endsWith("/")) { 
       SharedPreferences.Editor editor = sharedPreferences.edit(); 
       editor.putString(key, value.substring(0, value.length() - 1)); 
       editor.apply(); 
      } 
     } 

     updatePreference(findPreference(key)); 
    } 

    private void updatePreference (Preference preference) { 
     if (preference instanceof EditTextPreference) { 
      EditTextPreference editTextPreference = (EditTextPreference)preference; 
      editTextPreference.setSummary(editTextPreference.getText()); 
     } 
    } 
} 

答えて

0

ではなく、問題を解決しEditorsetTextを使用:

は、ここに私のコードです。

コード:

if (key.equals("url")) { 
     String value = sharedPreferences.getString(key, ""); 

     if (value.endsWith("/")) { 
      EditTextPreference editTextPreference = (EditTextPreference)findPreference(key); 
      editTextPreference.setText(value.substring(0, value.length() - 1)); 
     } 
    }