studio how edittext developers autocompletar java android android-edittext onitemclicklistener

java - how - Elemento seleccionado de Autocompletar Textview Mostrar como simple Textview?



autocompletetextview android developers (7)

Estoy usando una vista de texto de Autocompletar que muestra algunos nombres de la base de datos. Quiero mostrar un nombre en una vista de texto que seleccioné de autocompletar la vista de texto. Aquí está mi código:

ArrayList<String> s1 = new ArrayList<String>(); for (StudentInfo cn : studentInfo) { s1.add(cn.getName()); } ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,s1); a1.setThreshold(1); a1.setAdapter(adapter);

a1.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { } });


¡Gratitud a Stefan Richter! Me gustaría agregar que es posible usar List<T> directamente cuando construyes el adaptador:

AutoCompleteTextView autoCompleteTextView = dialogView.findViewById(R.id.autoComplete); // Where mStudentsInfo is List<StudentInfo> ArrayAdapter<StudentInfo> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, mStudentsInfo); autoCompleteTextView.setAdapter(adapter); autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Object item = parent.getItemAtPosition(position); if (item instanceof StudentInfo) { StudentInfo studentInfo = (StudentInfo) item; // do something with the studentInfo object } } });

Y no olvide reemplazar el método toString() en StudentInfo.class :

public class StudentInfo { .... @Override public String toString() { return studentName; } }


Desde la vista, el objeto arg1 obtiene el valor de la Cadena. Desde ArrayList suministrado a AutoCompleteTextView, obtenga la posición del artículo usando este String.

en su caso, el código se vería más abajo.

int selectedPos = s1.indexOf ((String) ((TextView) arg1) .getText ());

selectedPos es la posición de la cadena en el ArrayList suministrado.


El uso de la posición padre es ''0''

txt_search.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View arg1, int position, long id) { Object item = parent.getItemAtPosition(0); if (item instanceof MYData{ MYData data=(MYData) item; String dd = data.getName(); } } });


Para obtener el elemento seleccionado de la selección de autocompletar, que utiliza el tipo de datos definido por el usuario y establece los valores de la lista relacionada. Seguir el código funcionó para mí

@Override public void onItemClick(AdapterView<?> parent, View view, int position, long arg3) { int selectedPos = getYourList().indexOf((((TextView)view).getText()).toString()); SomeDAO dao = getSomeDaoList().get(selectedPos); //do your code }

Nota: He cambiado los nombres de los parámetros predeterminados en onClimateClick como arg0-parent, arg1-view, arg2-position y SomeDAO es un tipo de datos definido por el usuario


Pruébalo de esta manera:

AutoCompleteTextView a1 = (AutoCompleteTextView) findViewById(...); StudentInfo[] s1 = studentInfo.toArray(new StudentInfo[studentInfo.size()]); ArrayAdapter<StudentInfo> adapter = new ArrayAdapter<StudentInfo>(this, android.R.layout.simple_dropdown_item_1line, s1); a1.setAdapter(adapter); a1.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View arg1, int position, long arg3) { Object item = parent.getItemAtPosition(position); if (item instanceof StudentInfo){ StudentInfo student=(StudentInfo) item; doSomethingWith(student); } } });

ArrayAdapter utiliza el método toString () de StudentInfo para generar los textos mostrados, por lo que debe implementar un buen método toString.

De esta forma, este tipo de implementación se puede adaptar a cualquier tipo de objeto.

Por cierto: prefiero android.R.layout.simple_spinner_dropdown_item en lugar de android.R.layout.simple_dropdown_item_1line


anulando el método toString para la clase de modelo (StudenInfo en este caso) ¡no es una buena idea!
Si solo desea obtener el texto del elemento seleccionado, use este código:

autoCompleteView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String selectedItem = (String) parent.getItemAtPosition(position); // here is your selected item } });


su s1 contiene todos los nombres de la database de database

a1.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { Log.d("your selected item",""+s1.get(position)); //s1.get(position) is name selected from autocompletetextview // now you can show the value on textview. } });

Espero que esto te ayude