LoginSignup
11
11

More than 5 years have passed since last update.

PreferenceFragment表示時に規定値をSummaryに表示し、また動的に更新する。

Posted at

以下の通りです。

ConfigFragment.java

public class ConfigFragment extends PreferenceFragment{
    //private ListView lv;

    public static ConfigFragment newInstance() {
        return new ConfigFragment();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.pref);
    }

    @Override
    public void onResume() {
        super.onResume();
        reloadSummary();
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(listener);
    }

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

    private void reloadSummary(){
        ListAdapter adapter = getPreferenceScreen().getRootAdapter();
        for (int i=0;i<adapter.getCount();i++){
            Object item = adapter.getItem(i);
            if (item instanceof ListPreference){
                ListPreference preference = (ListPreference) item;
                preference.setSummary(preference.getEntry() == null ? "" : preference.getEntry());
            }
        }
    }

    private SharedPreferences.OnSharedPreferenceChangeListener listener =
            new SharedPreferences.OnSharedPreferenceChangeListener() {
                public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
                    reloadSummary();
                }
            };
}

重要なのはreloadSummary()となります。
ここでPreferenceFragmentのアダプターを引っ張ってきてSummaryに反映しています。

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11