#android #autocompletetextview
#Android #autocompletetextview
Вопрос:
Сегодня у меня есть конкретный вопрос, и я искал в Google, но не смог найти ответа, который мог бы помочь.
Моя активность имеет AsyncTask, которая загружает некоторые строки из базы данных и показывает их в autocompletetextview. Я использую HttpURLConnection для получения строк, затем анализирую их с помощью библиотеки json-simple, а затем показываю их в autocompletetextview. Вот весь код для ACTV, который находится в onPostExecute():
ArrayList<Object> result = new ArrayList<>();
for (Shift_OneTime sot : shifts) {
result.add(sot.getName() " " sot.getDay() " " sot.getMonth() " " sot.getYear());
}
for (Employee e : emps) {
result.add(e.toString());
}
acs = (AutoCompleteTextView) findViewById(R.id.autocompletesearch);
ArrayAdapter<Object> adapter = new ArrayAdapter<>(MainScreen.this, android.R.layout.simple_list_item_1, result);
acs.setAdapter(adapter);
acs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
acs.setText("");
acs.clearFocus();
Object o = adapterView.getItemAtPosition(i);
if (o instanceof Employee) {
Intent n = new Intent(MainScreen.this, EmployeeDetailsActivity.class);
n.putExtra("employeeid", ((Employee) o).getId());
startActivity(n);
} else if (o instanceof Shift_OneTime) {
Intent n = new Intent(MainScreen.this, ShiftDetailsActivity.class);
n.putExtra("shiftid", ((Shift_OneTime) o).getId());
startActivity(n);
}
}
});
Я получаю эту кучу предупреждений:
W/IInputConnectionWrapper: getSelectedText on inactive InputConnection
W/IInputConnectionWrapper: requestCursorAnchorInfo on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
Эти ошибки появляются, когда я нажимаю на строку, которая появляется после ввода чего-либо в autocompletetextview. Теперь мое наблюдение не является точным, но в прошлый раз, когда оно работало, я использовал старый DefaultHttpClient или что-то еще, что теперь устарело. Именно по этой причине я перешел на HttpURLConnection. После этого изменения я также переместил ACTV в AsyncTask, поскольку я читаю строки из моего веб-сервиса php, а также добавил ActionBarDrawerToggle и переопределил его методы, чтобы программная клавиатура скрывалась, когда я открываю панель навигации.
Я попытался удалить расширенный переключатель, а также попытался вернуть OnItemClickListener() обратно за пределы AsyncTask, но это не помогло. Я не могу сейчас вернуться к устаревшему HTTP-клиенту, поэтому я хотел бы знать, есть ли у кого-нибудь какие-либо идеи… Большое спасибо
Ответ №1:
вам нужно использовать setOnClickListener ();
Комментарии:
1. нет, setOnClickListener реагирует при нажатии на ACTV. Это не то, чего я хочу
2. ур отсутствуют, и еще просто, чтобы убедиться, что вы получаете правильные вещи
3. у меня это было раньше, и ни один из ifs не был обработан, но это еще было
Ответ №2:
Проблема, которую я не заметил, заключается в том, что Object o = adapterView.getItemAtPosition(i);
я получал объект типа String (обратите внимание на то, как я заполняю список результатов), ни объект Employee, ни Shift_OneTime . Поэтому, когда я проверил, есть ли ‘o instanceof XXX’, это не было ни тем, ни другим. Поэтому вместо заполнения списка строками мне пришлось вставлять сами объекты, например: Before:
result.add(sot.getName() .... );
После:
result.add(e);
Поиск символов в ACTV выполняется с использованием значений в методе toString() в классах Employee и Shift_OneTime.
Надеюсь, это поможет кому-то в будущем.
Ответ №3:
Я много чего перепробовал и нашел это решение
Я сделал это решение, когда Onclicklistener не работал над моим кодом
Поместите Onclicklistener в свой пользовательский адаптер в getView().
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final Customer customer = getItem(position);
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.customer_row, parent, false);
}
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(yourContext, "text clicked", Toast.LENGTH_SHORT).show();
}
});
//....do your stuff here
return convertView;
}