Change the summary of a ListPreference with the new value (Android)

前端 未结 14 985
感动是毒
感动是毒 2020-12-30 03:01

How can I modify the summary of a ListPreference to the new \"Entry\" string selected by the user (not the entry value)

I suppouse its with setOnPreferenceChangeList

相关标签:
14条回答
  • 2020-12-30 04:04

    There is no need to do those extra coding, i have faced this problem and solved it by a single line.

    After many hours looking on all the answers in this and other similar questions, i found out very easiest way to do this without extending ListPreference, you can do it in common extends PreferenceActivity, see the code bellow.

    public class UserSettingsActivity extends PreferenceActivity 
    {
        ListPreference listpref;
    
        @Override
        public void onCreate(Bundle savedInstenceState)
        {
            super.onCreate(savedInstenceState);
            addPreferencesFromResource(R.xml.settings);
            listpref = (ListPreference)findPreference("prefDefaultCurrency");
    
            listpref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() 
            {           
                @Override
                public boolean onPreferenceChange(Preference preference, Object value) {
                // TODO Auto-generated method stub
    
                listpref.setSummary(listpref.getEntries()[Integer.parseInt(value.toString())]);
                return true;
            }
        });
    

    Thats it, with a single line, all you have to do is get value passed from the onPreferenceChange(Preference preference, Object value) parse it to integer and pass it to listpref.setSummary(listpref.getEntries()[Integer.parseInt(value.toString())]);

    0 讨论(0)
  • 2020-12-30 04:06

    Hi edited the above for EditText if that helps :)

    package fr.bmigette.crocoschedulerconsoleandroid;
    import android.content.Context;
    import android.preference.EditTextPreference;
    import android.util.AttributeSet;
    
    /**
     * Created by bastien on 28/07/2015.
     */
    public class EditTextPreferenceWithSummary extends EditTextPreference{
        public EditTextPreferenceWithSummary(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public EditTextPreferenceWithSummary(Context context) {
            super(context);
        }
    
        @Override
        public void setText(String value) {
            super.setText(value);
            setSummary(value);
        }
    
        @Override
        public void setSummary(CharSequence summary) {
            super.setSummary(getText());
        }
    }
    

    And creates the preference.xml like this:

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <PreferenceCategory
            android:key="pref_key_category_host"
            android:title="@string/title_category_host" >
            <fr.bmigette.crocoschedulerconsoleandroid.EditTextPreferenceWithSummary
                android:defaultValue="@string/default_pref_host_1"
                android:key="pref_key_host_1"
                android:summary="@string/default_pref_host_1"
                android:title="@string/title_pref_host_1" />
    
            <fr.bmigette.crocoschedulerconsoleandroid.EditTextPreferenceWithSummary
                android:defaultValue="@string/default_pref_port_1"
                android:key="pref_key_port_1"
                android:summary="@string/default_pref_port_1"
                android:title="@string/title_pref_port_1" />
    
            <fr.bmigette.crocoschedulerconsoleandroid.EditTextPreferenceWithSummary
                android:defaultValue="@string/default_pref_pass_1"
                android:key="pref_key_pass_1"
                android:summary="@string/default_pref_pass_1"
                android:title="@string/title_pref_pass_1" />
    
        </PreferenceCategory>
    </PreferenceScreen>
    
    0 讨论(0)
提交回复
热议问题