Atom Blog

Como utilizar el AutoComplete en un EditText en Android con historial

En este corto post veremos como realizar el auto completado de palabras o frases dentro de un EditText en Android en Java

El AutoComplete en un EditText en Android es necesario cuando se requiere auto completar frases o palabras con las palabras que se han utilizado previamente. Para ello Android permite guardar un historial de las palabras introducidas a traves de las preferencias compartidas (SharedPreferences)

Antes que nada definimos el elemento AutoCompleteTextView dentro de nuestro archivo *.xml

<AutoCompleteTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textInput"
    android:layout_marginTop="108dp"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:editable="true"
    android:hint="Ingrese algo aqui"/>

Seguido de esto incluimos el siguiente código en la clase *.java

public static final String PREFS_NAME = "PingBusPrefs";
public static final String PREFS_SEARCH_HISTORY = "SearchHistory";
private SharedPreferences settings;
private Set<String> history;


Luego definimos el siguiente metodo:

private void setAutoCompleteSource()
{
    AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.textInput);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(
  this, android.R.layout.simple_list_item_1, history.toArray(new String[history.size()]));
    textView.setAdapter(adapter);
}

Guardamos cada valor introducido en el editor de texto:

private void addSearchInput(String input)
{
    if (!history.contains(input))
    {
        history.add(input);
        setAutoCompleteSource();
    }
}

Utilizamos el siguiente metodo para guardar las palabras introducidas en las preferencias compartidas:

private void savePrefs()
{
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putStringSet(PREFS_SEARCH_HISTORY, history);

    editor.commit();
}

Configuramos las siguientes variables:

settings = getSharedPreferences(PREFS_NAME, 0);
history = settings.getStringSet(PREFS_SEARCH_HISTORY, new HashSet<String>());

setAutoCompleteSource();

final AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.textInput);
textView.setOnKeyListener(new View.OnKeyListener()
{
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        // If the event is a key-down event on the "enter" button
        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                (keyCode == KeyEvent.KEYCODE_ENTER)) {

            addSearchInput(textView.getText().toString());
            return true;
        }
        return false;
    }
});

@Override
protected void onStop()
{
    super.onStop();

    savePrefs();
}

No hay comentarios.:

Publicar un comentario