#java #android #json #adapter #autocomplete
Доброе времени суток! Хочу реализовать AutoCompeleteView с подсказкой в виде выпадающего списка. Я беру данные с помощью JSON Вот ссылка Вроде все работает, но при нажатии на список я хочу получить еще id и currency из json. Как мне реализовать Class Adapter для этого? public class SuggestionAdapter extends ArrayAdapter{ public String LOG_TAG = "my_log"; private List suggestions; private List idsuggestions;// public SuggestionAdapter(Context context, String filter) { super(context, R.layout.dropdown_item,R.id.textView11);//android.R.layout.simple_dropdown_item_1line suggestions = new ArrayList (); idsuggestions = new ArrayList ();// } @Override public int getCount() { return suggestions.size(); } @Override public String getItem(int index) { return suggestions.get(index); } @Override public Filter getFilter() { Filter myFilter = new Filter() { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults filterResults = new FilterResults(); JsonParse jp=new JsonParse(); if (constraint != null) { // A class that queries a web API, parses the data and // returns an ArrayList List new_suggestions =jp.getParseJsonWCF(constraint.toString()); suggestions.clear(); idsuggestions.clear();// for (int i=0;i 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } }; return myFilter; } }
Ответы
Ответ 1
Сделайте адаптер типа ArrayAdapter. В конструктор передавайте уже готовый список, а в методе getView(int position, View convertView, ViewGroup parent) выводите название примерно так ((TextView)view).setText(list.getItem(position).getName) Должно выглядеть примерно так public class SuggestionAdapter extends ArrayAdapter { private int viewResourceId; public SuggestionAdapter(Context context, int textViewResourceId, List objects) { super(context, textViewResourceId, objects); viewResourceId = textViewResourceId; } @Override public int getCount() { return suggestions.size(); } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(viewResourceId, null); } SuggestGetSet item = this.getItem(position); if (item != null) { TextView textView = (TextView) v; textView.setText(item.getName()); } return v; } } После чего вешаете обработчик private OnItemClickListener listener = new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { SuggestGetSet item = (SuggestGetSet)parent.getAdapter().getItem(position); //some work } }; Ответ 2
Можно двумя способами: Повесить onClickListener на список. В нём будет position нажатого элемента. По нему из адаптера можно получить данные методом списка getItem(int position) Переопределить метод адаптера getView и в нём повесить onClickListener на View элемента. В метод getView также передаётся position, по которому из адаптера можно получить данные методом списка getItem(int position)
Комментариев нет:
Отправить комментарий