2011-01-27 22 views
27

tengo un AutoCompleteTextView en mi aplicación que funciona. He creado con éxito un onClickItemListener. La pregunta es cómo agarrar el texto que el usuario seleccionó. Y esta es la cuestión: tengo una ArrayList con palabras que se pasan al adaptador para buscar sugerencias. A medida que el usuario escribe una palabra, la lista de sugerencias se acorta (en filas en el lado de UI), así que cuando quiero obtener la palabra de ArrayList en el índice que el usuario seleccionó, obtengo la palabra incorrecta porque los índices no coinciden. ¿Cómo puedo obtener el texto (cadena) que el usuario eligió sin tener que meterse con el índice? Aquí está mi código:cómo obtener texto de autocompletar textview android

public class AutocompleteActivity extends BaseActivity { 

    private DBManager m_db; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.autocomplete); 

     m_db = new DBManager(this); 
     final ArrayList<String> words = m_db.selectAllWords(); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listitem, words); 

     AutoCompleteTextView tv = (AutoCompleteTextView)findViewById(R.id.autocomplete); 
     tv.setThreshold(1); 
     tv.setAdapter(adapter); 

     tv.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
       Log.i("SELECTED TEXT WAS------->", words.get(arg2)); 
      } 
     }); 
    } 
} 
+0

Gracias por agregar este fragmento de código, ayudó por lo que me llevó casi 6 horas. +1 para ese – Android

+0

Código funcionó. Un pequeño consejo para principiantes como yo. Después de pegar este código, haga clic en el campo y escriba una letra para ver cómo baja el cuadro de sugerencias. Pegué el código, hice clic en el archivo y esperé la casilla de sugerencias en POPUP, que nunca se abrirá. Pero hay un método showDialogBox() para mostrar el POPUP. – Pravin

Respuesta

36

arg0 ser su AdapterView y arg2 la posición.

Ha intentado:

arg0.getItemAtPosition(arg2); 
+0

busco texto seleccionado por el usuario que no sea un id –

+0

arg3 es id de la base de datos. podemos usarlo directamente – Vijay

40

Sí ... por desgracia, el nombre de los parámetros en el método onItemClick debe implementar no son tan auto-descriptivo, pero aquí hay un ejemplo con los nombres de lo que son :

autoCompleteTextView.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) { 
     String selection = (String)parent.getItemAtPosition(position); 
     //TODO Do something with the selected text 
    } 
}); 
  • padres el AdapterView donde el clic que pasó.
  • ver la vista dentro de la AdapterView que se hizo clic (esto será una vista proporcionada por el adaptador )
  • La posición de la posición de la vista en el adaptador
  • id El ID de fila del elemento que se ha hecho clic .

Para más información ver: http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html

+0

Su sugerencia está funcionando bien en lugar de las respuestas seleccionadas. –

+0

Dud gracias. Esta es la mejor respuesta. –

8

Creo que lo que busca es esto.

String s = this.mCountry.getEditableText().toString(); 

Dónde mCountry es el AutoCompleteTextView.

this.mCountry = (AutoCompleteTextView) findViewById(R.id.autocomplete_country); 
    ArrayAdapter<String> adapterCountry = new ArrayAdapter<String>(this, R.layout.list_item, countries); 
    this.mCountry.setAdapter(adapterCountry); 

mCountry es la lista de los países, y yo quería salvar el país seleccionado en SharedPreferences.

Espero que esto ayude.

3

probar esto:

txtPurpose.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
           long arg3) { 
      Purpose selected = (Purpose) arg0.getAdapter().getItem(arg2); 
      txtPurpose.setTag(selected); 
     } 
    }); 
2

De una u otra de conseguir el texto de la sugerencia seleccionada en AutoCompleteTextView se

@Override 
public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
{ 
    TextView txtvw=(TextView) view; 
    String str=txtvw.getText().toString(); 
    int index = contactNames.indexOf(str); 
} 
3

más fácil de todos

Para conseguir el texto de la propuesta seleccionada en AutoCompleteTextView usa esto

 autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Log.e("========>>", autoCompleteTextView.getText().toString()); 
     } 
    }); 
1

Aquí está el código que resolverá el problema.

SetTag (Dao.getPosition) en el método getView() del adaptador.

+0

tienes razón. esto nos dará datos particulares. de la etiqueta de vista :) –

0

Para obtener el texto del elemento que se muestra seleccionada por el usuario

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
    String selectedItemText = arg0.getItemAtPosition(arg2); 
    Log.i("myTag", "SELECTED TEXT WAS["+selectedItemText+"]); 
} 

Siguiendo las mejores prácticas, por favor utilice algún tipo de nomenclatura descriptiva de las variables, el código tendrá más sentido:

public void onItemClick(AdapterView<?> adapterViewIn, View viewIn, int selectedItemIndexIn, long id)