Come ottenere il testo da AutoCompleteTextView?
-
26-10-2019 - |
Domanda
Ho un AutoCompleteTextView
nella mia app che funziona. Ho creato con successo un onClickItemListener
. La domanda è come per afferrare il testo l'utente ha selezionato.
E questa è la cosa: ho un ArrayList
con le parole di essere passate al Adapter
per cercare suggerimenti. Mentre l'utente digita una parola della lista suggerimenti si accorcia (in fila sul lato utente) in modo che quando voglio ottenere la parola dal ArrayList
all'indice l'utente ha selezionato ottengo la parola sbagliata, perché gli indici non corrisponde.
Come posso ottenere il testo (String
) l'utente ha scelto, senza dover pasticciare con l'indice?
Ecco il mio codice:
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));
}
});
}
}
Soluzione
arg0
essere il vostro AdapterView
e arg2
la posizione.
Hai provato:
arg0.getItemAtPosition(arg2);
Altri suggerimenti
Sì ... purtroppo il nome dei parametri sul metodo onItemClick è necessario implementare non sono così auto-descrittivo, ma qui è un esempio con i nomi di quello che sono:
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
}
});
- Il genitore AdapterView in cui il clic è successo.
- visualizzare la vista all'interno l'AdapterView che è stato cliccato (questa sarà una vista fornita dal adattatore)
- La posizione della posizione della vista l'adattatore
- id La riga id dell'elemento che è stato fatto clic.
Per maggiori informazioni visita: http://developer.android.com /reference/android/widget/AdapterView.OnItemClickListener.html
Credo che ciò che si sta cercando è questo.
String s = this.mCountry.getEditableText().toString();
Dove mCountry
è il 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
è l'elenco dei paesi, e ho voluto salvare il paese selezionato in SharedPreferences
.
Spero che questo aiuti.
più facile di tutti
Per ottenere il testo del suggerimento selezionato in AutoCompleteTextView utilizzare questo
autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("========>>", autoCompleteTextView.getText().toString());
}
});
provare questo:
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);
}
});
Un altro di ottenere il testo del suggerimento selezionato in AutoCompleteTextView
è
@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);
}
Ecco il codice che risolverà il 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) in GetView () della scheda.
Per ottenere il testo della voce visualizzata selezionato dall'utente
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
String selectedItemText = arg0.getItemAtPosition(arg2);
Log.i("myTag", "SELECTED TEXT WAS["+selectedItemText+"]);
}
A seguito di migliori pratiche, si prega di utilizzare una qualche forma di nomenclatura descrittivo per le variabili, il codice avrà più senso:
public void onItemClick(AdapterView<?> adapterViewIn, View viewIn, int selectedItemIndexIn, long id)
V'è anche un modo per ottenere voce fuori dal onItemClick
:
int index = tv.getListSelection();
if (index != ListView.INVALID_POSITION) {
Object item = tv.getAdapter().getItem(index);
}
attenzione che int getListSelection()
può restituire ListView.INVALID_POSITION
se non c'è discesa o se non v'è alcuna selezione.