如何解决尝试在 recyclerview 中使用 searchview 时所有项目都会消失吗?
大家 我有 recyclerView 从 firebase 数据库中检索数据
我使用 searchview 和 filter list 来搜索项目,但是当点击 searchview 进行搜索时,所有项目都消失了,搜索视图不起作用
我的主要活动是片段,因为我使用底部导航
public class RV_Worker_Fragment extends Fragment implements RecyclerView_InterFace {
private RecyclerView rv_worker;
private FirebaseDatabase db;
private ArrayList <WorkerModel> list;
private WorkerAdapter workerAdapter;
SearchView searchView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.rv_persons_fragment,container,false);
rv_worker =view.findViewById(R.id.recyclerView_persons);
db =FirebaseDatabase.getInstance();
rv_worker.setHasFixedSize(true);
rv_worker.setLayoutManager(new LinearLayoutManager(getActivity()));
searchView = view.findViewById(R.id.searchView);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
workerAdapter.getFilter().filter(newText);
return false;
}
});
getList();
return view;
}
private void getList()
{
db.getReference("Employees").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
list=new ArrayList <>();
workerAdapter = new WorkerAdapter(getActivity(),list,RV_Worker_Fragment.this);
rv_worker.setAdapter(workerAdapter);
for (DataSnapshot child :snapshot.getChildren())
{
WorkerModel workerModel =child.getValue(WorkerModel.class);
list.add(workerModel);
workerAdapter.notifyItemInserted(list.size()-1);
workerAdapter.getItemCount();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(getActivity(),error.getMessage(),Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onItemClick(final int position) {
Intent intent = new Intent(getActivity(),Worker_Details.class);
intent.putExtra("name",list.get(position).getName());
intent.putExtra("id",list.get(position).getId());
startActivity(intent);
}
}
适配器
public class WorkerAdapter extends RecyclerView.Adapter <WorkerAdapter.ViewHolder> implements Filterable {
private Context context;
private List <WorkerModel> list;
private List <WorkerModel> listFilter;
private RecyclerView_InterFace recyclerView_interFace;
public WorkerAdapter(Context context,List <WorkerModel> llist,RecyclerView_InterFace recyclerView_interFace) {
this.context = context;
this.list = llist;
this.recyclerView_interFace = recyclerView_interFace;
listFilter = new ArrayList <>(list);
}
@NonNull
@Override
public WorkerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.card_worker_treader_contractor,parent,false));
}
@Override
public void onBindViewHolder(@NonNull final WorkerAdapter.ViewHolder holder,final int position) {
final WorkerModel workerModel = list.get(position);
holder.tv_name.setText(workerModel.getName());
holder.btn_call.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String phonNumber = workerModel.getPhone();
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:"+phonNumber));
context.startActivity(intent);
}
});
holder.btn_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new AlertDialog.Builder(context)
.setTitle("حذف")
.setMessage("هل تريد الحذف")
.setPositiveButton("نعم",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface,int i) {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference db = database.getReference("Employees");
db.child(list.get(position).getId()).removeValue();
}
})
.setNegativeButton("لا",null)
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView tv_name;
ImageView btn_call,btn_delete ;
public ViewHolder(@NonNull View itemView) {
super(itemView);
tv_name = itemView.findViewById(R.id.tx_name);
btn_call = itemView.findViewById(R.id.btn_call);
btn_delete = itemView.findViewById(R.id.btn_deleteP);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
recyclerView_interFace.onItemClick(getAdapterPosition());
}
});
}
}
@Override
public Filter getFilter() {
return filter;
}
private Filter filter = new Filter() {
//run on background thread
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
List<WorkerModel> listFilter2 = new ArrayList <>();
if (charSequence ==null || charSequence.length()==0){
// if search text is empty add all original list values to filterlist
listFilter2.addAll(listFilter);
}else {
String filterPattern = charSequence.toString().toLowerCase().trim();
// Perform search on whole original list
for (WorkerModel workerModel : listFilter){
if (workerModel.getName().toLowerCase().contains(filterPattern)){
listFilter2.add(workerModel);
}
}
}
FilterResults results = new FilterResults();
results.values = listFilter2;
return results;
}
//run on UI thread
@Override
protected void publishResults(CharSequence charSequence,FilterResults filterResults) {
list.clear();
list.addAll((List) filterResults.values);
notifyDataSetChanged();
}
};
}
你们有什么问题吗? 提前感谢帮助
解决方法
在 WorkerAdapter 的 performFiltering() 中尝试,添加以下行作为第一行:if (listFilter.size() == 0) listFilter = new ArrayList<>(list);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。