Java 如何填写回收视图
如何使用SearchView筛选回收者视图 我尝试了所有的视频教程,但都从列表中获得了他们的物品回收视图 但是我从db那里得到了我的物品,不知道该怎么做 这是我的适配器代码Java 如何填写回收视图,java,android,android-studio,android-room,Java,Android,Android Studio,Android Room,如何使用SearchView筛选回收者视图 我尝试了所有的视频教程,但都从列表中获得了他们的物品回收视图 但是我从db那里得到了我的物品,不知道该怎么做 这是我的适配器代码 public class AthleteAdapter extends RecyclerView.Adapter<AthleteAdapter.AthleteHolder> { private List<Athlete> athletes = new ArrayList<>();
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));
}
}
});
}
}
公共类AthleteAdapter扩展了RecyclerView.Adapter{
私有列表=新的ArrayList();
私人监听;
@非空
@凌驾
公共AthleteHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
View itemview=LayoutFlater.from(parent.getContext()).flate(R.layout.atternate\u item,parent,false);
返回新的AthleteHolder(itemview);
}
@凌驾
public void onBindViewHolder(@NonNull AthleteHolder,int位置){
运动员currnetAthlete=运动员。获取(位置);
holder.textViewName.setText(currentathlete.getAthleter_name());
holder.textViewLastname.setText(currentathlete.getAthletite_lastname());
holder.textView_phonenumber.setText(currentathlete.getathleter_phonenumber());
holder.textViewTime1.setText(String.valueOf(currentathlete.getSign_in_time());
holder.textViewTime2.setText(String.valueOf(currentathlete.getCheck_tution_time());
}
公众运动员(运动员名单){
这个。运动员=运动员;
notifyDataSetChanged();
}
公共位置(国际位置){
返回运动员。获得(位置);
}
@凌驾
public int getItemCount(){
返回运动员。大小();
}
公共void setOnItemClickListener(OnItemClickListener侦听器){
this.listener=listener;
}
公共接口侦听器{
麦克利克(运动员);
}
类AthleteHolder扩展了RecyclerView.ViewHolder{
私有TextView textViewName、textViewLastname、TextView_电话号码、textViewTime1、textViewTime2;
公共AthleteHolder(@NonNull View itemView){
超级(项目视图);
textViewName=itemView.findViewById(R.id.name\u main);
textViewLastname=itemView.findViewById(R.id.lastname\u main);
textView\u phonenumber=itemView.findViewById(R.id.textView\u编号);
textViewTime1=itemView.findViewById(R.id.time1);
textViewTime2=itemView.findViewById(R.id.time2);
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int position=getAdapterPosition();
if(侦听器!=null&&position!=RecyclerView.NO\u位置){
listener.onItemClick(运动员.get(位置));
}
}
});
}
}
}步骤1:从数据库获取所有数据,并将该列表提供给适配器
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:比较searchview文本和列表文本(如果退出),然后将列表提供给适配器
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);
}
公共无效过滤器(字符串文本){
列表名称=新的ArrayList();
用于(用户u:usersList){
如果(u.getNAME().toLowerCase().contains(text.toLowerCase())){
名称。添加(u);
}
}
adapter.filterlist(名称);
}
步骤4:-更改列表并通知适配器(在适配器类中)
public void filterlist(列表名){
this.usersList=名称;
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);
}
}
公共类dataAdapter扩展了RecyclerView.Adapter{
公共列表用户列表;
语境;
数据接口数据接口;
公共数据适配器(上下文,列表用户列表){
this.usersList=usersList;
this.context=上下文;
}
公共无效setdatainterfacemethod(dataInterface dataInterface){
this.dataInterface=dataInterface;
}
@非空
@凌驾
public viewholder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.include\u recycle\u demo,viewGroup,false);
返回新的viewholder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull final viewholder viewholder,final int i){
}
@凌驾
public int getItemCount(){
返回usersList.size();
}
公共无效筛选器列表(列表名称){
this.usersList=名称;
notifyDataSetChanged();
}
公共类viewholder扩展了RecyclerView.viewholder{
公共视图持有者(@NonNull View itemView){
超级(项目视图);
}
}
}a有一个错误,我不知道如何修复它这是一个错误,试图对适配器类中获得的空对象referenceDid调用虚拟方法“void com.example.gym.AthleteAdapter.filterList(java.util.List)”?
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);
}
}