1

私のアプリの設定ページには2つありますEditTextPreference(s)値を変更すると、要約が更新される必要があります。今すぐ、EditTextPreference(s)の値を入力してOKを押すと、要約が更新されます。しかし、アプリケーションを再起動すると、要約値がデフォルト値に戻ります。しかし、新しい値はEditTextPreferenceにとどまります(私はそれを開くとわかります)。 EditTextPreferenceに新しい値を入力すると、要約が再び更新されます。 毎回ユーザー入力からサマリーを更新するにはどうすればよいですか?ここでアンドロイドで要約の要約を更新するには

は私のコードです:

SettingActivity.java

public class SettingsActivity extends AppCompatActivity { 


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

    // Display the fragment as the main content. 
    getFragmentManager().beginTransaction() 
      .replace(android.R.id.content, new SettingsFragment()).commit(); 

    setTitle("Settings"); 
    ActionBar actionBar=getSupportActionBar(); 
    // Show the Up button in the action bar. 
    actionBar.setDisplayHomeAsUpEnabled(true); 
} 



public static class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { 

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

     // Load the preferences from an XML resource 
     addPreferencesFromResource(R.xml.settings_layout); 
     setHasOptionsMenu(true); 

    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     getPreferenceScreen().getSharedPreferences() 
       .registerOnSharedPreferenceChangeListener(this); 

    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     getPreferenceScreen().getSharedPreferences() 
       .unregisterOnSharedPreferenceChangeListener(this); 

    } 

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

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == android.R.id.home) { 
      startActivity(new Intent(getActivity(), HomeActivity.class)); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 
} 

settings_layout.xml

<EditTextPreference 
     android:capitalize="words" 
     android:dependency="email_switch" 
     android:defaultValue="@string/default_email_address" 
     android:key="example_text" 
     android:summary="@string/pref_description_email" 
     android:maxLines="1" 
     android:selectAllOnFocus="true" 
     android:singleLine="true" 
     android:title="@string/pref_email_address_text_title" 
     android:inputType="textWebEmailAddress" /> 
<EditTextPreference 
     android:capitalize="words" 
     android:dependency="sms_switch" 
     android:defaultValue="@string/default_mobile_number" 
     android:key="example_text1" 
     android:summary="@string/pref_description_sms" 
     android:maxLines="1" 
     android:selectAllOnFocus="true" 
     android:singleLine="true" 
     android:title="@string/pref_mobile_number_text_title" 
     android:inputType="phone"/> 

P.S.私はSettingsFragmentクラスのごonCreate()方法で

PreferenceManager.setDefaultValues(this, R.xml.settings_layout, false); 

答えて

1

私の主な活動でこれを呼んで、あなたのSharedPreferencesへの参照を取得し、その後onSharedPreferenceChanged()メソッドを実行する必要があります。あなたのonCreate()は次のようになります。

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

    // Load the preferences from an XML resource 
    addPreferencesFromResource(R.xml.settings_layout); 
    setHasOptionsMenu(true); 

    //if you are using default SharedPreferences 
    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getContext()); 

    onSharedPreferenceChanged(sharedPrefs, getString(R.string.key1)); 
    onSharedPreferenceChanged(sharedPrefs, getString(R.string.key2)); 

} 
key1key2があなたの好みのキーである

example_textとあなたのケースでexample_text1は)あなたのstringsファイルに保存しました。私は文字列の参照なしでこれを自分自身で行うときに問題が発生したため、それらを抽出することをお勧めします。

+0

ありがとう、兄弟..それは働いた。 :) –

+1

甘い!さらに多くの設定を追加する場合は、キーストリングを使用してそれぞれのメソッドの別のメソッドを追加するだけです。 –

+0

確かに私はそれを行う:) –