Possibile completare automaticamente una EditTextPreference?

È ansible avere un EditTextPreference con AutoComplete ad esso collegato?

So ho attaccare uno ad un elemento con un ID, ma ho problemi a capire come colbind l'ArrayAdapter al field di preferenza.

  • Incolla senza formattazione di text ricco in EditText
  • La fusione manifesta non è rioutput: uses-sdk: minSdkVersion 8 non può essere più piccola
  • Come aprire un database SQLite in uno strumento di gestione SQLite
  • InetAddress.getByName su Android
  • Alternativa a getRunningTasks in Android L
  • Problema di performance sul tipo di carattere TextView
  • Questo è sbagliato, ma è più vicino ansible.

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

  • Come integrare l'authentication firebase con gli endpoint del motore di app di Google
  • Intervallo di tempo di connessione di Android BLE
  • Android :: VideoView all'interno di uno ScrollView
  • Android: In che modo devo separare il codice da stile?
  • Come evitare le perdite di Eclipse su XServer durante la modifica di file XML Android?
  • Voce di menu di opzione personalizzata di Android
  • 3 Solutions collect form web for “Possibile completare automaticamente una EditTextPreference?”

    Probabilmente se lo sovrascriverai e fai la tua propria visualizzazione per questo e usi l'object AutoCompleteTextView come elemento che funziona, poiché attualmente non vedo come un semplice EditText possa essere modificato per completare l'autocompletamento.

    Mi è sembrato che ci whereva essere un modo "più facile" per realizzarlo, che hacking nella class EditTextPreference e messo in discussione con la vista. Ecco la mia soluzione, poiché AutoCompleteTextView estende EditText, ho solo dovuto ignorare i methods EditTextPreference che chiamano direttamente il loro object costante EditText.

     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); } } } } 

    Grazie a Brady per il collegamento alla fonte.

    Ecco una soluzione che ho implementato studiando il codice sorgente EditTextPreference.java .

    Essenzialmente è necessario sottostrarvi EditTextPreference e sovrascrivere quando si lega alla window di dialogo. A questo punto è ansible recuperare il text EditText, copiare i valori e rimuoverlo dal relativo gruppo di visualizzazioni principale. Quindi iniettate il tuo Autocompletetextview e agganciate il suo 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"; } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.