Möglichkeit, eine EditTextPreference autocomplete?

Ist es möglich, eine EditTextPreference mit AutoVervollständigen zu haben?

Ich weiß, dass ich ein Element mit einer ID anhängen soll, aber ich habe Schwierigkeiten, herauszufinden, wie man den ArrayAdapter an das Präferenzfeld anhängt.

  • Mehrere Kameras in libgdx (wahrscheinlich ähnlich in anderen Frameworks)
  • Gibt es eine Möglichkeit zu stoppen Mobile Safari Einfügen von Kommas in Nummernfelder auf HTML-Formularen?
  • Wie kann ich das Ziel auf Android-Projekt ändern?
  • Wie behalte ich die Symbolleiste an der Spitze, wenn AppBar zusammenbricht / expandiert?
  • Verschiebung von Fragmenten innerhalb der Registerkarte
  • OnCreate (...) wird zweimal nach dem Drehen des Gerätes aufgerufen
  • Das ist falsch, aber es ist so nah wie ich kann.

    final String[] TEAMS = getResources().getStringArray(R.array.teams); AutoCompleteTextView EditTextPreference = (AutoCompleteTextView) findViewById(R.id.editTextPrefTeam); ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, TEAMS); EditTextPreference.setAdapter(adapter); 

  • Wie kann man die installierte Anwendung zur Laufzeit überprüfen, um Phishing-Angriffe zu verhindern?
  • Sichere Webservice-Anfragen
  • Was sind Best Practices für die Verwendung von AES-Verschlüsselung in Android?
  • Wie kann ich programmgesteuert Layout in Android?
  • Wie kann ich ein DialogFragment mit Kompatibilitätspaket anzeigen?
  • Verwenden von AppCompat 'layout_behavior' mit '@ string / appbar_scrolling_view_behavior' wirft eine Ausnahme aus
  • 3 Solutions collect form web for “Möglichkeit, eine EditTextPreference autocomplete?”

    Wahrscheinlich, wenn Sie es subklassen und machen Sie Ihre eigene Ansicht für das und verwenden Sie die AutoCompleteTextView Objekt als Element wird es funktionieren, wie derzeit sehe ich nicht, wie ein einfaches EditText geändert werden kann, um autocomplete.

    Es schien mir, dass es eine "leichtere" Weise geben musste, dies zu erreichen, als durch das Hacken in die EditTextPreference-Klasse und das Durcheinander mit der Ansicht. Hier ist meine Lösung, da AutoCompleteTextView EditText erweitert hat, musste ich nur die EditTextPreference-Methoden überschreiben, die ihr konstantes EditText-Objekt direkt aufrufen.

     public class AutoCompletePreference extends EditTextPreference { private static AutoCompleteTextView mEditText = null; public AutoCompletePreference(Context context, AttributeSet attrs) { super(context, attrs); mEditText = new AutoCompleteTextView(context, attrs); mEditText.setThreshold(0); //The adapter of your choice ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_dropdown_item_1line, COUNTRIES); mEditText.setAdapter(adapter); } private static final String[] COUNTRIES = new String[] { "Belgium", "France", "Italy", "Germany", "Spain" }; @Override protected void onBindDialogView(View view) { AutoCompleteTextView editText = mEditText; editText.setText(getText()); ViewParent oldParent = editText.getParent(); if (oldParent != view) { if (oldParent != null) { ((ViewGroup) oldParent).removeView(editText); } onAddEditTextToDialogView(view, editText); } } @Override protected void onDialogClosed(boolean positiveResult) { if (positiveResult) { String value = mEditText.getText().toString(); if (callChangeListener(value)) { setText(value); } } } } 

    Danke an Brady für die Verknüpfung mit der Quelle.

    Hier ist ein Workaround, den ich implementiert habe, indem ich den EditTextPreference.java Quellcode studiere.

    Im Wesentlichen müssen Sie Subclass EditTextPreference und Override, wenn es bindet an den Dialog. An diesem Punkt kannst du den EditText abrufen, seine Werte kopieren und aus der übergeordneten Ansichtsgruppe entfernen. Dann sprengen Sie Ihre Autocompletetextview und hook up es ist Arrayadapter.

     public class AutoCompleteEditTextPreference extends EditTextPreference { public AutoCompleteEditTextPreference(Context context) { super(context); } public AutoCompleteEditTextPreference(Context context, AttributeSet attrs) { super(context, attrs); } public AutoCompleteEditTextPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } /** * the default EditTextPreference does not make it easy to * use an AutoCompleteEditTextPreference field. By overriding this method * we perform surgery on it to use the type of edit field that * we want. */ protected void onBindDialogView(View view) { super.onBindDialogView(view); // find the current EditText object final EditText editText = (EditText)view.findViewById(android.R.id.edit); // copy its layout params LayoutParams params = editText.getLayoutParams(); ViewGroup vg = (ViewGroup)editText.getParent(); String curVal = editText.getText().toString(); // remove it from the existing layout hierarchy vg.removeView(editText); // construct a new editable autocomplete object with the appropriate params // and id that the TextEditPreference is expecting mACTV = new AutoCompleteTextView(getContext()); mACTV.setLayoutParams(params); mACTV.setId(android.R.id.edit); mACTV.setText(curVal); ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_dropdown_item_1line, [LIST OF DATA HERE]); mACTV.setAdapter(adapter); // add the new view to the layout vg.addView(mACTV); } /** * Because the baseclass does not handle this correctly * we need to query our injected AutoCompleteTextView for * the value to save */ protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); if (positiveResult && mACTV != null) { String value = mACTV.getText().toString(); if (callChangeListener(value)) { setText(value); } } } /** * again we need to override methods from the base class */ public EditText getEditText() { return mACTV; } private AutoCompleteTextView mACTV = null; private final String TAG = "AutoCompleteEditTextPreference"; } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.