Как получить текст из AutoCompleteTextView? - PullRequest
29 голосов
/ 27 января 2011

У меня есть AutoCompleteTextView в моем приложении, которое работает.Я успешно создал onClickItemListener.Вопрос в том, как получить выбранный пользователем текст.

И вот в чем дело: у меня есть ArrayList со словами, которые передаются в Adapter для поиска предложений.Когда пользователь вводит слово, список предложений становится короче (в строках на стороне пользовательского интерфейса), поэтому, когда я хочу получить слово из ArrayList по индексу, выбранному пользователем, я получаю неправильное слово, потому что индексы не совпадают.

Как я могу получить текст (String), который выбрал пользователь, не связываясь с индексом?

Вот мой код:

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));
            }
        });
    }
}

Ответы [ 9 ]

46 голосов
/ 15 февраля 2012

Да ... к сожалению, имя параметров в методе onItemClick, который вы должны реализовать, не настолько самоописательно, но вот пример с именами того, чем они являются:

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
    }
});
  • parent AdapterView, где произошел щелчок.
  • просмотр Вид внутри AdapterView, по которому щелкнули (это будет представление, предоставленное адаптер)
  • position Положение обзора в адаптере
  • id Идентификатор строки элемента, который был нажат.

Подробнее см .: http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html

40 голосов
/ 27 января 2011

arg0 - ваша AdapterView и arg2 позиция.

Вы пробовали:

arg0.getItemAtPosition(arg2);
8 голосов
/ 04 мая 2012

Я думаю, что вы ищете вот что.

String s = this.mCountry.getEditableText().toString();

Где mCountry - это 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 - список стран,и я хотел сохранить страну, выбранную в SharedPreferences.

Надеюсь, это поможет.

4 голосов
/ 18 апреля 2016

Самый простой из всех

Для получения текста выбранного предложения в AutoCompleteTextView используйте это

      autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.e("========>>", autoCompleteTextView.getText().toString());
        }
    });
3 голосов
/ 12 мая 2015

попробуйте это:

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);
        }
    });
2 голосов
/ 14 мая 2015

Один из вариантов выбора текста предложения, выбранного в 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);
} 
1 голос
/ 20 мая 2016

Вот код, который решит проблему.

 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) в методе getView () адаптера.

0 голосов
/ 31 октября 2018

Существует также способ получить элемент за пределами onItemClick:

int index = tv.getListSelection();
if (index != ListView.INVALID_POSITION) {
    Object item = tv.getAdapter().getItem(index);
}

, помните, что int getListSelection() может вернуть ListView.INVALID_POSITION, если нет выпадающего списка или нет выбора.

0 голосов
/ 29 декабря 2016

Для получения текста отображаемого элемента, выбранного пользователем

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    String selectedItemText = arg0.getItemAtPosition(arg2);
    Log.i("myTag", "SELECTED TEXT WAS["+selectedItemText+"]);
}

Следуя рекомендациям, пожалуйста, используйте некоторую форму описательной номенклатуры для ваших переменных, ваш код будет иметь больше смысла:

public void onItemClick(AdapterView<?> adapterViewIn, View viewIn, int selectedItemIndexIn, long id) 
...