Android: ListPreference скрыть / отключить значение - PullRequest
6 голосов
/ 05 августа 2011

Я создаю диалог listPreference на основе xml (entry и entryValues).

<string-array name="listArray">
    <item>Title (A-Z)</item>
    <item>Title (Z-A)</item>
    <item>Visits (default)</item>
    <item>Date</item>
    <item>Manual</item>
</string-array> 
<string-array name="listValues">
   <item>titleASC</item>
   <item>titleDESC</item>
   <item>visitsSort</item>
   <item>createSort</item>
   <item>manualSort</item>
</string-array>

Я хочу скрыть / отключить некоторые записи (например, вручную) на основе некоторых других параметров.

Я понимаю, что это должно быть внутри этой области:

Preference sorted = (Preference) findPreference(OPT_SORT);

        sorted.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {

                if (params) {
                    What should i put here to hide/disable some of the entries?
                }

                return true;
            }
        });

Спасибо!

EDIT

Лучшее решение, которое я нашел, это загрузить другой набор Entry и EntryValues. Класс предпочтений (onCreate):

ListPreference sortBy = (ListPreference) findPreference(OPT_SORT);
        if (isTabletDevice()) {
            sortBy.setEntries(getResources().getStringArray(R.array.HClistArray));
            sortBy.setEntryValues(getResources().getStringArray(R.array.HClistValues));
        }

Надеюсь, это кому-нибудь поможет! :)

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

AFAIK, ListPreference не поддерживает это. Возможно, вы сможете создать свой собственный подкласс ListPreference, в котором вы используете пользовательский Adapter и указать, какие элементы включены и не включены.

2 голосов
/ 11 февраля 2013

Ответ довольно поздно, надеюсь, это поможет.

    private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(Preference preference, Object value) {
        String stringValue = value.toString();

        if (preference instanceof ListPreference) {
            // For list preferences, look up the correct display value in
            // the preference's 'entries' list.
            ListPreference listPreference = (ListPreference) preference;
            int index = listPreference.findIndexOfValue(stringValue);

            // Set the summary to reflect the new value.
            preference
                    .setSummary(index >= 0 ? listPreference.getEntries()[index]
                            : null);


            // If it's sync_factory_list, enable/disable appropriate settings
            if(preference.getKey().equalsIgnoreCase("sync_factory_list")){

                Preference p_api_key = preference.getPreferenceManager().findPreference("ws_api_key");
                Preference p_api_url = preference.getPreferenceManager().findPreference("ws_api_url");

                switch ( index) {
                    case 0: //local
                        p_api_key.setEnabled(false);
                        p_api_url.setEnabled(false);
                        break;
                    case 1: //prestashop webservice
                        p_api_key.setEnabled(true);
                        p_api_url.setEnabled(true);
                        break;
                    case 2: //thrift
                        p_api_key.setEnabled(false);
                        p_api_url.setEnabled(false);

                        break;

                    default:
                        p_api_key.setEnabled(false);
                        p_api_url.setEnabled(false);
                        break;
                }

            }



        }
    ...
    return true;
}

}

...