Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Реализация ArrayAdapter

#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)

Комментариев нет:

Отправить комментарий