Как получить текст от AutoCompletetExtView?
-
26-10-2019 - |
Вопрос
у меня есть 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));
}
});
}
}
Решение
arg0
быть вашим AdapterView
а также arg2
позиция.
Ты пытался:
arg0.getItemAtPosition(arg2);
Другие советы
Да ... К сожалению, название параметров на методе 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
}
});
- Родитель Адаптервью, где произошел щелчок.
- Просмотреть представление в AdapterView, который был нажат (это будет представление, предоставленное адаптером)
- позиционировать положение вида в адаптере
- ID идентификатор строки элемента, который был нажат.
Для получения дополнительной информации см.: http://developer.android.com/reference/android/widget/adapterview.onitemclicklistener.html
Я думаю, что вы ищете, это это.
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
.
Надеюсь это поможет.
Самый простой из всех
Для получения текста выбранного предложения в AutoCocletetExtView это используйте это
autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("========>>", autoCompleteTextView.getText().toString());
}
});
попробуй это:
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);
}
});
Друг друга в том, чтобы получить текст предложения, выбранный в 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);
}
Вот код, который решит проблему.
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 () адаптера.
Чтобы получить текст отображаемого элемента, выбранного пользователем
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)
Есть также способ получить предмет за пределами onItemClick
:
int index = tv.getListSelection();
if (index != ListView.INVALID_POSITION) {
Object item = tv.getAdapter().getItem(index);
}
Остерегайтесь этого int getListSelection()
может вернуться ListView.INVALID_POSITION
Если выпадает или нет выбора.