Android recyclerview搜索筛选器不工作?
我已经在adapter类中编写了getFilter,在mainactivity中编写了setOnQueryTextListener,但不知道问题出在哪里,因为它不是筛选或搜索请帮助我需要实现搜索筛选器回收器查看键入时必须筛选列表 //适配器类Android recyclerview搜索筛选器不工作?,android,search,filter,android-recyclerview,Android,Search,Filter,Android Recyclerview,我已经在adapter类中编写了getFilter,在mainactivity中编写了setOnQueryTextListener,但不知道问题出在哪里,因为它不是筛选或搜索请帮助我需要实现搜索筛选器回收器查看键入时必须筛选列表 //适配器类 public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.MenuViewHolder> implements Filterable { private Con
public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.MenuViewHolder> implements Filterable {
private Context mCtx;
private List<Menus> menusList;
private List<Menus> menusFilteredList;
public MenuAdapter(Context mCtx, List<Menus> menusList) {
this.mCtx = mCtx;
this.menusList = menusList;
}
@Override
public MenuAdapter.MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(mCtx);
View view = inflater.inflate(R.layout.menu_list, null);
return new MenuAdapter.MenuViewHolder(view);
}
@Override
public void onBindViewHolder(MenuAdapter.MenuViewHolder holder, final int position) {
final Menus menus = menusList.get(position);
//loading the image
Glide.with(mCtx)
.load(menus.getMenuimage())
.into(holder.menuimage);
holder.menuname.setText(menus.getMenuname());
holder.cardview.setCardBackgroundColor(Color.parseColor(menus.getMenubg()));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(mCtx, "" + menus.getMenuname(), Toast.LENGTH_SHORT).show();
if (menus.getMenuurl().getBytes().length == 0)
{
Toast.makeText(mCtx, "Not Available.", Toast.LENGTH_SHORT).show();
}
else
{
Intent web = new Intent(mCtx,WebActivity.class);
web.putExtra("url",menus.getMenuurl());
web.putExtra("urltitle",menus.getMenuname());
mCtx.startActivity(web);
((Activity)mCtx).finish();
}
}
});
}
@Override
public int getItemCount() {
return menusFilteredList.size();
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
menusFilteredList = menusList;
} else {
// List<Menus> filteredList = new List<>();
List<Menus> filteredList = new ArrayList<>();
for (Menus menus : menusList) {
if (menus.getMenuname().toLowerCase().contains(charString) || menus.getMenuurl().toLowerCase().contains(charString)) {
filteredList.add(menus);
}
}
menusFilteredList = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = menusFilteredList;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
menusList = (ArrayList<Menus>) filterResults.values;
notifyDataSetChanged();
}
};
}
class MenuViewHolder extends RecyclerView.ViewHolder {
ImageView menuimage;
TextView menuname;
CardView cardview;
public MenuViewHolder(View itemView) {
super(itemView);
menuimage = itemView.findViewById(R.id.menuimage);
menuname = itemView.findViewById(R.id.menuname);
cardview = itemView.findViewById(R.id.cardview);
}
}
}
您应该也设置计数值
@Override
protected FilterResults performFiltering(CharSequence constraint) {
filteredList.clear();
final FilterResults results = new FilterResults();
if (constraint.length() == 0) {
filteredList.addAll(menusList);
} else {
final String filterPattern = constraint.toString().toLowerCase().trim();
for (Menus menus : menusList) {
if (menus.getMenuname().toLowerCase().contains(charString) || menus.getMenuurl().toLowerCase().contains(charString)) {
filteredList.add(menus);
}
}
}
System.out.println("Count Number " + filteredList.size());
results.values = filteredList;
results.count = filteredList.size();
return results;
}
请注意:筛选列表应在初始阶段仅在适配器中加载所有列表项doenst filteredits正在工作问题在于侦听器
@Override
protected FilterResults performFiltering(CharSequence constraint) {
filteredList.clear();
final FilterResults results = new FilterResults();
if (constraint.length() == 0) {
filteredList.addAll(menusList);
} else {
final String filterPattern = constraint.toString().toLowerCase().trim();
for (Menus menus : menusList) {
if (menus.getMenuname().toLowerCase().contains(charString) || menus.getMenuurl().toLowerCase().contains(charString)) {
filteredList.add(menus);
}
}
}
System.out.println("Count Number " + filteredList.size());
results.values = filteredList;
results.count = filteredList.size();
return results;
}