ListPreference Dialog um Suchfilter erweitern.

  • Antworten:5
Simon
  • Forum-Beiträge: 5

21.11.2014, 16:15:51 via Website

Hallo Community,

weiß jemand, wie ich den aufpoppenden Dialog (AlertDialog) der ListPreference um einen EditText erweitern kann, so dass die Liste nach der Eingabe gefiltert wird.

Ich habe schon vereinzelt Tutorials gefunden, verstehe aber die ganzen Zusammenhänge nicht (Die Tutorials beziehen sich aber auch immer auf eine Activity mit dem ListView Widget, also nicht ganz das was ich suche).
Ich weiß nicht ob ich den Adapter anpassen muss oder ListView oder Dialog oder ...

Vielleicht kann mir von euch jemand helfen?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

21.11.2014, 16:17:32 via Website

Hallo Simon,
Herzlich Wilkommen hier im Forum :)
Zeig mal deinen bisherigen Code dann kann man eine genauere Aussage machen.

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Simon
  • Forum-Beiträge: 5

21.11.2014, 16:32:57 via Website

Hi Pascal,

meine Launcher Activity erbt von PreferenceActivity und ist die beim SDK mitgelieferte Beispiel PreferenceActivity, aber etwas angepasst.

die pref_general.xml mit 2 ListPreferences

<PreferenceScreen xmlns:android="ich darf keine links posten">

<CheckBoxPreference
    android:key="checkbox_barrierfree"
    android:title="@string/pref_title_barrier_free"
    android:summary="@string/pref_description_barrier_free"
    android:defaultValue="true" />


<!-- NOTE: Hide buttons to simplify the UI. Users can touch outside the dialog to
     dismiss it. -->
<!-- NOTE: ListPreference's summary should be set to its value by the activity code. -->
<ListPreference
    android:key="list_start"
    android:title="@string/pref_title_start"
    android:defaultValue="-1"
    android:entries="@array/pref_start_titles"
    android:entryValues="@array/pref_start_values"
    android:negativeButtonText="@null"
    android:positiveButtonText="@null" />

<ListPreference
    android:key="list_destination"
    android:title="@string/pref_title_destination"
    android:defaultValue="-1"
    android:entries="@array/pref_destination_titles"
    android:entryValues="@array/pref_destination_values"
    android:negativeButtonText="@null"
    android:positiveButtonText="@null" />

<Preference
    android:key="prefbutton_startNavigation"
    android:title="Start Navigation" />

Die Launcher Acitivity hat die 2 globalen Variablen
ListPreference listDestination;
ListPreference listStart;`

und

    private void setupSimplePreferencesScreen() {
    if (!isSimplePreferences(this)) {
        return;
    }
    addPreferencesFromResource(R.xml.pref_general);

    // Bind the summaries of EditText/List/Dialog/Ringtone preferences to
    // their values. When their values change, their summaries are updated
    // to reflect the new value, per the Android Design guidelines.
    bindPreferenceSummaryToValue(findPreference("list_destination"));
    listDestination = (ListPreference) findPreference("list_destination");

    bindPreferenceSummaryToValue(findPreference("list_start"));
    listStart = (ListPreference) findPreference("list_start");

...
}
});

Die Liste wird in einer inner AsynkTask Klasse gefüllt, da die Werte per WebService übers Netzwerk geschickt werden

            listDestination.setEntries(locations);
            listStart.setEntries(locations);

            listDestination.setEntryValues(Ids);
            listStart.setEntryValues(Ids);

Also erstmal alles ohne irgendwelche Modifikationen an der ListPreference bzw. dem Dialog. Es werden auch nur Strings als Entrys gespeichert und int als EntryValues.

Antworten
Simon
  • Forum-Beiträge: 5

21.11.2014, 16:36:22 via Website

Das sieht dann folgendermaßen aus, und bei >50 Einträgen später, wäre eine Filterfunktion ganz nett :)

image

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

21.11.2014, 16:41:11 via Website

Na ja, wenn ich das richig in Erinnerung habe, muss man dafür eigene Preferences programmieren, ob es natürlich vereinfacht geht (erben von listpreferences) weiss ich nicht.

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Simon
  • Forum-Beiträge: 5

21.11.2014, 16:46:01 via Website

Damit hatte ich auch angefangen und ListPreference erweitert.
Dann kann man

protected void onPrepareDialogBuilder(AlertDialog.Builder builder) 

überschreiben und den builder anpassen, aber wie ich da jetzt einen Button reinbekomme weiß ich nicht.
builder bietet z.B. die Methoden setView(...) und setAdapter(...) und ich rutsche wieder weiter in den Kaninchenbau :D

Antworten