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));
            }
        });
    }
}
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top