как искать в кастомном адаптере?

как я могу искать в списке, используя текст редактирования (оба фрагмента)? Мне нужно использовать в качестве параметра поиска ИМЕНА и ОПИСАНИЯ. Я схожу с ума, пожалуйста, помогите мне!

Это код пользовательского класса адаптера списка:

public class CustomAdapter extends BaseAdapter implements Filterable {
    private Context context;

    public int[] IMAGES = {R.drawable.rai1, ...};

    public String[] NAMES = {"Rai 1", ...};

   public String[] DESCRIPTIONS = {"1", ...};

    public String[] URL = {"http://www.---", ...};

   public CustomAdapter (Context c){context = c;}
    @Override
    public int getCount() {return IMAGES.length;}
    @Override
    public Object getItem(int position) {return URL[position];}
    @Override
    public long getItemId(int position) {return 0;}
    @Override
    public View getView(int position, View view, ViewGroup viewGroup) {
        LayoutInflater inflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.custom_layout, null);
        ImageView imageView = (ImageView)view.findViewById(R.id.imageView);
        TextView textView_nome = (TextView)view.findViewById(R.id.textView_nome);
        TextView textView_descrizione = (TextView)view.findViewById(R.id.textView_descrizione);
        imageView.setImageResource(IMAGES[position]);
        textView_nome.setText(NAMES[position]);
        textView_descrizione.setText(DESCRIPTIONS[position]);
        return view;
    }

    @Override
    public Filter getFilter() {
        return null;
    }
}

person Giuseppe Fontana    schedule 28.02.2018    source источник


Ответы (2)


Существует много сообщений по вашему вопросу о переполнении стека. Изучите эти сообщения

Textwatcher с настраиваемым списком в Android

Как фильтровать ListView через EditText

Фильтр представления списка Android

person Fazal Hussain    schedule 28.02.2018

Вы можете сделать собственную реализацию поиска, используя объект для передачи данных.

public class CustomAdapter extends BaseAdapter {

    ImageObj[] objs=new ImageObj[]{new ImageObj(...)};
    List<ImageObj> list= Arrays.asList(objs);

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position).url;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.custom_layout, null);
        ImageView imageView = (ImageView)view.findViewById(R.id.imageView);
        TextView textView_nome = (TextView)view.findViewById(R.id.textView_nome);
        TextView textView_descrizione = (TextView)view.findViewById(R.id.textView_descrizione);
        imageView.setImageResource(list.get(position).image);
        textView_nome.setText(list.get(position).name);
        textView_descrizione.setText(list.get(position).description);
        return view;
    }

    //Clear the last search and filter
    void filter(String query){
        list.clear();
        for (ImageObj imageObj:objs){
            if (imageObj.isValid(query))
                list.add(imageObj);
        }
        notifyDataSetChanged();
    }

    class ImageObj{
        int image;
        String name;
        String description;
        String url;

        public ImageObj(int image, String name, String description, String url) {
            this.image = image;
            this.name = name;
            this.description = description;
            this.url = url;
        }

        boolean isValid(String query){
            return name.toLowerCase().contains(query.toLowerCase())||description.toLowerCase().contains(query.toLowerCase());
        }
    }
}
person Jordy Mendoza    schedule 28.02.2018
comment
и где теперь эта часть: public int[] IMAGES = {R.drawable.rai1, ...}; public String[] NAMES = {Rai 1, ...}; public String[] DESCRIPTIONS = {1, ...}; public String[] URL = {---, ...}; часть, где я пишу элементы списка? - person Giuseppe Fontana; 28.02.2018
comment
Теперь вам нужно создать массив ImageObj и установить изображение, имя, описание и URL-адрес в конструкторе. - person Jordy Mendoza; 01.03.2018
comment
как я могу это сделать? - person Giuseppe Fontana; 01.03.2018
comment
Как обычный массив, но с новым ImageObj() - person Jordy Mendoza; 02.03.2018