本文介绍了如何填充 recyclerView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用 SearchView 过滤 Recycler View我尝试了所有的视频教程,但他们都从列表中获得了他们的项目 Recycler View但我从 db 那里得到了我的物品,但我不知道我该怎么做

how can i filter Recycler View using SearchViewi try all the video tuturial but all of them get thier item Recycler View from a listbut i get my item from db and dont know how should i do this

这是我的适配器代码

public  class AthleteAdapter extends RecyclerView.Adapter<AthleteAdapter.AthleteHolder> {
    private List<Athlete> athletes = new ArrayList<>();

private OnItemClickListener listener;

@NonNull
@Override

public AthleteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemview = LayoutInflater.from(parent.getContext()).inflate(R.layout.athlete_item, parent, false);
    return new AthleteHolder(itemview);
}

@Override
public void onBindViewHolder(@NonNull AthleteHolder holder, int position) {
    Athlete currnetAthlete = athletes.get(position);
    holder.textViewName.setText(currnetAthlete.getAthlete_name());
    holder.textViewLastname.setText(currnetAthlete.getAthlete_lastname());
    holder.textView_phonenumber.setText(currnetAthlete.getAthlete_phonenumber());
    holder.textViewTime1.setText(String.valueOf(currnetAthlete.getSign_in_time()));
    holder.textViewTime2.setText(String.valueOf(currnetAthlete.getCheck_tution_time()));


}

public void setAthletes(List<Athlete> athletes) {
    this.athletes = athletes;
    notifyDataSetChanged();
}

public Athlete getposition(int position) {
    return athletes.get(position);
}

@Override
public int getItemCount() {
    return athletes.size();
}

public void setOnItemClickListener(OnItemClickListener listener) {
    this.listener = listener;
}

public interface OnItemClickListener {
    void onItemClick(Athlete athlete);
}

class AthleteHolder extends RecyclerView.ViewHolder {
    private TextView textViewName, textViewLastname, textView_phonenumber, textViewTime1, textViewTime2;

    public AthleteHolder(@NonNull View itemView) {
        super(itemView);
        textViewName = itemView.findViewById(R.id.name_main);
        textViewLastname = itemView.findViewById(R.id.lastname_main);
        textView_phonenumber = itemView.findViewById(R.id.textView_number);
        textViewTime1 = itemView.findViewById(R.id.time1);
        textViewTime2 = itemView.findViewById(R.id.time2);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = getAdapterPosition();
                if (listener != null && position != RecyclerView.NO_POSITION) {
                    listener.onItemClick(athletes.get(position));
                }
            }
        });
    }

}

}

推荐答案

Step 1 : 从 db 中获取所有数据并将该列表提供给 Adapter

Step 1 : Get all data from db and give that list to Adapter

    usersList = db.getAll();
    adapter = new dataAdapter(getApplicationContext(), usersList);
    adapter.setdatainterfacemethod(this);

第 2 步:从 Searchview 获取文本

Step 2 : get Text from Searchview

    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {

            filter(s.toString());
            }
            return false;
        }
    });

第 3 步:如果存在,比较搜索视图文本和列表文本,然后将列表提供给适配器

Step 3 : compare searchview text and list text if exits then give list to adapter

public void filter(String text) {
    List<Users> name = new ArrayList<>();

    for (Users u : usersList) {
        if (u.getNAME().toLowerCase().contains(text.toLowerCase())) {
            name.add(u);
        }
    }

    adapter.filterlist(name);
}

第 4 步:- 更改列表并通知适配器(在适配器类中)

Step 4 :- change list and notify adapter (in adapter class)

public void filterlist(List<Users> name) {
    this.usersList = name;
    notifyDataSetChanged();
}

--------------------- 适配器类 -----------------

public class dataAdapter extends RecyclerView.Adapter<dataAdapter.viewholder> {

public List<Users> usersList;
Context context;
dataInterface dataInterface;

public dataAdapter(Context context, List<Users> usersList) {
    this.usersList = usersList;
    this.context = context;
}

public void setdatainterfacemethod(dataInterface dataInterface) {
    this.dataInterface = dataInterface;
}

@NonNull
@Override
public viewholder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.include_recycle_demo, viewGroup, false);
    return new viewholder(view);
}

@Override
public void onBindViewHolder(@NonNull final viewholder viewholder, final int i) {

}

@Override
public int getItemCount() {
    return usersList.size();
}

public void filterlist(List<Users> name) {
    this.usersList = name;
    notifyDataSetChanged();
}

public class viewholder extends RecyclerView.ViewHolder {

    public viewholder(@NonNull View itemView) {
        super(itemView);
    }
}

}

这篇关于如何填充 recyclerView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 20:30