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));
            }
        });
    }
}
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top