setonitemclicklistener - cómo obtener texto de autocompletar textview android
recyclerview android (8)
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 la interfaz de usuario), por lo que cuando deseo obtener la palabra de la Lista de Array en el índice, el usuario seleccionó la palabra incorrecta porque los índices no coinciden. ¿Cómo puedo obtener el texto (String) que el usuario eligió sin tener que meterme 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));
}
});
}
}
Aquí está el código que solucionará 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.
Creo que lo que estás buscando es esto.
String s = this.mCountry.getEditableText().toString();
Donde 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 guardar el país seleccionado en SharedPreferences
.
Espero que esto ayude.
Para obtener el texto del elemento visualizado 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, use 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)
Sí ... desafortunadamente, el nombre de los parámetros en el método onItemClick que debe implementar no es tan descriptivo, pero aquí hay un ejemplo con los nombres de los 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.
- vista La vista dentro de AdapterView en la que se hizo clic (esta será una vista proporcionada por el adaptador)
- posición la posición de la vista en el adaptador
- id El identificador de fila del elemento en el que se hizo clic.
Para obtener más información, consulte: http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html
Uno de otro para obtener el texto de la 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);
}
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);
}
});
arg0
siendo tu AdapterView
y arg2
la posición.
Has probado:
arg0.getItemAtPosition(arg2);
El mas facil de todos
Para obtener el texto de la sugerencia seleccionada en AutoCompleteTextView use esto
autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("========>>", autoCompleteTextView.getText().toString());
}
});