Tengo un AutoCompleteTextView que funciona bien cuando defino mi cadena de forma estática así ...

private String Names[] = {"Hassan", "Usman", "Kristen Stewart"};

Entonces hago esto ..

  ArrayAdapter<String> adapter = new ArrayAdapter<String>
            (this, android.R.layout.select_dialog_item, Names);
    //Getting the instance of AutoCompleteTextView

    catgNames.setThreshold(0);//will start working from 0 character
    catgNames.setAdapter(adapter);//setting the adapter data into the AutoCompleteTextView

Pero cuando intento cargar algunos datos de Sqlite , la sugerencia del menú desplegable no funciona. Estoy haciendo algo como esto ...

  Categories = new String[100]
  int i =0;
  DatabaseHandler db = new DatabaseHandler(this);
    List<entries> entries1 = db.getCategories();
    for (entries cn : entries1) {
        Log.i("", cn.getCategories());

        Names[i] = cn.getCategories();
        i++;
    }

Y luego de esto defino el adaptador ..

    ArrayAdapter<String> adapter = new ArrayAdapter<String>
            (this, android.R.layout.select_dialog_item, Names);
    //Getting the instance of AutoCompleteTextView

    catgNames.setThreshold(0);//will start working from 0 character
    catgNames.setAdapter(adapter);//setting the adapter data into the AutoCompleteTextView

Esto no funciona. No hay ningún error o advertencia en log-cat ..

1
Nikhil Kamath 28 ene. 2016 a las 14:59

3 respuestas

La mejor respuesta

He resuelto este problema..

Aquí está el error que estaba cometiendo ...

Categories = new String[100]

Esto creará una matriz de tamaño 100 que no estaba usando por completo.

Ahora..

DatabaseHandler db = new DatabaseHandler(this);
List<entries> entries1 = db.getCategories();
for (entries cn : entries1) {
    Log.i("", cn.getCategories());

    Names[i] = cn.getCategories();
    i++;
}

Este código solo colocaba los valores que estaban dentro de la base de datos y el resto de los valores seguían siendo nulos en la matriz de nombres.

Debido a que esta vista de texto de autocompletar no funcionaba correctamente.

Así es como lo resolví ...

int i=0;
    DatabaseHandler db = new DatabaseHandler(this);
    List<entries> entries1 = db.getCategories();
    for (entries cn : entries1) {
        i++;
    }
    Names = new String[i];
    int j=0;
    List<entries> entries3 = db.getCategories();
    for (entries cn : entries3) {
        Names[j] = cn.getCategories();
        j++;
    }

Encontré la solución en este enlace

0
Community 23 may. 2017 a las 11:52

Pruebe esto :

String[] Categories =[entries1.size];


int i =0;
  DatabaseHandler db = new DatabaseHandler(this);
    List<entries> entries1 = db.getCategories();
    for (entries cn : entries1) {
        Log.i("", cn.getCategories());

    Categories[i] = cn.getCategories();
    i++;
}

Cambie su valor de umbral:

catgNames.setThreshold(0);

Me gusta esto.

catgNames.setThreshold(1);

Espero que funcione.

0
HassanUsman 28 ene. 2016 a las 14:30

Me pregunto por qué pasaría Categorías en su ArrayAdapter mientras agrega sus valores en Nombres []. Debería ser 'Nombres' en lugar de 'Categorías' en su ArrayAdapter, como

ArrayAdapter<String> adapter = new ArrayAdapter<String>
        (this, android.R.layout.select_dialog_item, Names);

O puede crear una lista, agregar todos los valores de la columna db y pasarlos en su ArrayAdapter. ¡Espero eso ayude!

0
Sudip Podder 28 ene. 2016 a las 12:21