Android超过1个实时过滤器EditText

时间:2019-12-11 02:10:41

标签: java android filter

因此,我遇到了一个小问题,其中有一个已经实现了自定义适配器和过滤器的回收站视图。但是,我需要有2个过滤器,分别按名称和ID对另一个过滤器。但是,似乎他们两个都在按ID搜索。问题是:如何做到这一点,以便另一个EditText字段通过与原始条件不同的条件进行搜索?这是我的适配器的代码:

public class CustomRecyclerAdapter extends RecyclerView.Adapter<CustomRecyclerAdapter.CustomViewHolder> implements Filterable {

    private List<CollegeItem> collegeList;
    private List<CollegeItem> collegeListFull;
    private ItemClickListener itemClickListener;
    private Context context;

    public CustomRecyclerAdapter(List<CollegeItem> collegeList, Context context) {
        this.collegeList = collegeList;
        this.context = context;
        collegeListFull = new ArrayList<>(collegeList);
    }

    @NonNull
    @Override
    public CustomRecyclerAdapter.CustomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(context).inflate(R.layout.college_item, parent, false);
        return new CustomRecyclerAdapter.CustomViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(CustomRecyclerAdapter.CustomViewHolder holder, int position) {
        holder.name.setText(collegeList.get(position).getName());
        holder.id.setText(collegeList.get(position).getId());
    }

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

    public void setItemClickListener(ItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }

    @Override
    public Filter getFilter() {
        return collegeFilter;
    }

    private Filter collegeFilter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            List<CollegeItem> filteredList = new ArrayList<>();

            if(constraint == null || constraint.length() == 0) {
                filteredList.addAll(collegeListFull);
            } else {
                String filterPattern = constraint.toString().toLowerCase().trim();

                for(CollegeItem college : collegeListFull) {
                    if(college.getName().toLowerCase().contains(filterPattern)) {
                        filteredList.add(college);
                    }
                }
            }
            FilterResults results = new FilterResults();
            results.values = filteredList;
            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            collegeList.clear();
            collegeList.addAll((List) results.values);
            notifyDataSetChanged();
        }
    };

    public class CustomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView name, id;

        public CustomViewHolder(View v) {
            super(v);
            name = v.findViewById(R.id.college_name);
            id = v.findViewById(R.id.college_id);
        }

        @Override
        public void onClick(View v) {
            if(itemClickListener != null) {
                itemClickListener.onClick(v, getAdapterPosition());
            }
        }
    }
}

这是我在哪里执行搜索的Java代码:

public class CollegeFragment extends Fragment implements ItemClickListener{

    private RecyclerView recyclerView;
    private CustomRecyclerAdapter customRecyclerAdapter;
    private List<CollegeItem> collegeItemList = new ArrayList<>();
    private DatabaseCollege dbCollege;
    private EditText cName, cId;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View myFragmentView = inflater.inflate(R.layout.fragment_college, container, false);

        dbCollege = new DatabaseCollege(getActivity());

        recyclerView = myFragmentView.findViewById(R.id.recycler);
        customRecyclerAdapter = new CustomRecyclerAdapter(dbCollege.getCollegeData(), getActivity());

        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(customRecyclerAdapter);
        customRecyclerAdapter.setItemClickListener(this);

        cId = myFragmentView.findViewById(R.id.et_ipeds);
        cId.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                CollegeFragment.this.customRecyclerAdapter.getFilter().filter(s);
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
        //cName edit text filter algorithm here???

        return myFragmentView;

    }

    @Override
    public void onClick(View v, int position) {
        String name = collegeItemList.get(position).getName();
        String id = collegeItemList.get(position).getId();
    }
}

我有种应该更改或添加一些适配器的感觉,但是我不确定该怎么做。感谢您的帮助

0 个答案:

没有答案