【问题标题】:how can fillter the recyclerView如何填充recyclerView
【发布时间】:2019-08-04 21:19:51
【问题描述】:

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

这是我的适配器代码

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));
                }
            }
        });
    }

}

}

【问题讨论】:

    标签: java android android-studio android-room


    【解决方案1】:

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

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

    第 2 步:从 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 步:比较搜索视图文本和列表文本,如果退出,然后将列表提供给适配器

    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 步:- 更改列表并通知适配器(在适配器类中)

    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);
        }
    }
    

    }

    【讨论】:

    • a 有一个错误,我不知道我应该如何修复它这是错误尝试调用虚拟方法'void com.example.gym.AthleteAdapter.filterList(java.util.List) ' 在空对象引用上
    • 你进入适配器类了吗?
    猜你喜欢
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2019-04-26
    • 1970-01-01
    相关资源
    最近更新 更多