Categories
SugiBlog ホームページ制作・システム開発

設定画面の説明文を設定内容によって変更する

例としてEditTextPreferenceの設定がされていればSummaryに表示するようにします。

リスナーをimplementsする場合

public class Setting extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {

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

        PreferenceScreen ps = getPreferenceScreen();
        EditTextPreference ep = (EditTextPreference)ps.findPreference("key");
        if(ep.getText() != null && !ep.getText().equals("")) ep.setSummary(ep.getText());
    }

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

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

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

        if(key.equals("key")) {
            PreferenceScreen ps = getPreferenceScreen();
            EditTextPreference ep = (EditTextPreference)ps.findPreference("key");
            if(ep.getText() != null && !ep.getText().equals("")) {
                ep.setSummary(ep.getText());
            } else {
                ep.setSummary("デフォルトのSummary");
            }
        }
    }

}


リスナーをimplementsしない場合

public class Setting extends PreferenceActivity {

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

        PreferenceScreen ps = getPreferenceScreen();
        EditTextPreference ep = (EditTextPreference)ps.findPreference("key");
        if(ep.getText() != null && !ep.getText().equals("")) ep.setSummary(ep.getText());
    }

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

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

    private SharedPreferences.OnSharedPreferenceChangeListener listener =
        new SharedPreferences.OnSharedPreferenceChangeListener() {

            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

                if(key.equals("key")) {
                    PreferenceScreen ps = getPreferenceScreen();
                    EditTextPreference ep = (EditTextPreference)ps.findPreference("key");
                    if(ep.getText() != null && !ep.getText().equals("")) {
                        ep.setSummary(ep.getText());
                    } else {
                        ep.setSummary("デフォルトのSummary");
                    }
                }
            }
        };
}
2,187 views

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*