¿Cómo obtener texto de autocompleteteTextView?
-
26-10-2019 - |
Pregunta
Yo tengo un AutoCompleteTextView
en mi aplicación que funciona. He creado con éxito un onClickItemListener
. La pregunta es cómo tomar el texto que seleccionó el usuario.
Y esta es la cosa: tengo un ArrayList
con palabras pasadas al Adapter
para buscar sugerencias. A medida que el usuario escribe una palabra, la lista de sugerencias se vuelve más corta (en filas en el lado de la interfaz de usuario), así que cuando quiero obtener la palabra del ArrayList
En el índice del usuario seleccionado, obtengo la palabra incorrecta porque los índices no coinciden.
¿Cómo puedo obtener el texto (String
) ¿El usuario eligió sin tener que meterse con el índice?
Aquí está mi código:
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));
}
});
}
}
Solución
arg0
Ser tu AdapterView
y arg2
la posición.
Has probado:
arg0.getItemAtPosition(arg2);
Otros consejos
Sí ... Desafortunadamente, el nombre de los parámetros en el método OnItemClick que debe implementar no es tan autodescriptivo, 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
}
});
- Padre El AdapterView donde ocurrió el clic.
- Ver la vista dentro de AdapterView que se hizo clic (esta será una vista proporcionada por el adaptador)
- colocar la posición de la vista en el adaptador
- ID la ID de fila del elemento que se hizo clic.
Para más información, consulte: http://developer.android.com/reference/android/widget/adapterview.onitemclicklistener.html
Creo que lo que estás buscando 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 países, y quería salvar al país seleccionado en SharedPreferences
.
Espero que esto ayude.
Más fácil de todos
Para obtener el texto de la sugerencia seleccionada en autocompleteteTextView, use esto
autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("========>>", autoCompleteTextView.getText().toString());
}
});
prueba 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);
}
});
Unos a otros de recibir texto de sugerencia seleccionado en AutoCompleteTextView
es
@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);
}
Aquí está el código que resolverá el problema.
private AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
int index = (int) view.getTag();
Object item = parent.getItemAtPosition(index);
if (item instanceof SearchItemShareConnectionDAO) {
SearchItemShareConnectionDAO dao = (SearchItemShareConnectionDAO) item;
}
}
};
Settag (dao.getposition) en el método getView () del adaptador.
Para obtener el texto del elemento mostrado seleccionado 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, utilice alguna forma de nomenclatura descriptiva para sus variables, su código tendrá más sentido:
public void onItemClick(AdapterView<?> adapterViewIn, View viewIn, int selectedItemIndexIn, long id)
También hay una forma de obtener un artículo fuera del onItemClick
:
int index = tv.getListSelection();
if (index != ListView.INVALID_POSITION) {
Object item = tv.getAdapter().getItem(index);
}
Cuidado con eso int getListSelection()
puede regresar ListView.INVALID_POSITION
Si no hay desplegable o si no hay selección.