android - 如何在单击 Activity 类中的按钮时过滤适配器微调器上的列表

标签 android android-spinner android-recyclerview android-filterable

我正在尝试过滤微调器上的列表。旋转器位于适配器上。我的 Activity 类上有一个按钮,单击该按钮时,无论用户选择了微调器上的什么项目,都应显示相应的列表。 我试图实现 Filterable 接口(interface),但没有成功。 任何人都可以帮助我了解代码应该如何。我是 Android 的新手,因此很挣扎。

public class Department_Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements Filterable {

    public static Context context;
    private ArrayList<Department_model> arraylist;
    private List<Department_model> models_list;
    private ArrayAdapter<String> spinnerArrayAdapter;
    private AddressFilter addressFilter;

    public Department_Adapter(Context context, List<Department_model> department_modelList) {
        this.models_list = department_modelList;
        this.arraylist = new ArrayList<Department_model>();
        this.arraylist.addAll(department_modelList);
        this.context = context;

    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.department_childview, viewGroup, false);
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {

        final ViewHolder myViewHolder = (ViewHolder) viewHolder;
        final Department_model model = models_list.get(i);
        myViewHolder.text.setText("Department");

        String items[] = new String[models_list.size()];
        Set<String> Dep_list = new HashSet<String>();

        for (int j = 0; j < items.length; j++) {
            String ID[]= new String[models_list.size()];
            ID[j] = models_list.get(j).getDepartment_ID();
            items[j] = models_list.get(j).getDepartment_Name();
            String[] unique = new HashSet<String>(Arrays.asList(items)).toArray(new String[0]);
            spinnerArrayAdapter = new ArrayAdapter<String>(context, R.layout.department_list, unique);
            spinnerArrayAdapter.setDropDownViewResource(R.layout.category_list);
            myViewHolder.spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                    String dep_name = parent.getItemAtPosition(position).toString();
                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {

                }
            });
            myViewHolder.spinner.setAdapter(spinnerArrayAdapter);

            }




            }

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

    @Override
    public Filter getFilter() {
        if (addressFilter == null) {
            addressFilter = new AddressFilter();
        }
        return addressFilter;
    }

    public class AddressFilter extends Filter{


        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            String Dep_Id= String.valueOf(Long.parseLong(constraint.toString()));;
            FilterResults results = new FilterResults();

            ArrayList<Department_model> filtered_list = new ArrayList<Department_model>();
            for(int i = 0; i<models_list.size(); i++ ){
                if(models_list.get(i).getDepartment_ID()== Dep_Id){
                    Department_model obj = filtered_list.get(i);
                    filtered_list.add(obj);

                }
            }
            results.count = filtered_list.size();
            results.values = filtered_list;


            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {

            models_list = (ArrayList<Department_model>)results.values;
            notifyDataSetChanged();
        }
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView text, spinner_text;
        Spinner spinner;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            text = (TextView) itemView.findViewById(R.id.text);
            spinner = (Spinner) itemView.findViewById(R.id.spinner);
            spinner_text = (TextView) itemView.findViewById(R.id.spinner_text);
        }
    }
}

最佳答案

请尝试使用以下代码:看到您有 Filter same list 而不是 main list。

@Override
        protected FilterResults performFiltering(CharSequence constraint) {
            String Dep_Id= String.valueOf(Long.parseLong(constraint.toString()));;
            FilterResults results = new FilterResults();

            ArrayList<Department_model> filtered_list = new ArrayList<Department_model>();
            for(int i = 0; i< arraylist.size(); i++ ){
                if(arraylist.get(i).getDepartment_ID()== Dep_Id){
                    Department_model obj = arraylist.get(i);
                    filtered_list.add(obj);

                }
            }
            results.count = filtered_list.size();
            results.values = filtered_list;


            return results;
        }

关于android - 如何在单击 Activity 类中的按钮时过滤适配器微调器上的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53493080/

相关文章:

java - RecyclerView 不更新他的项目的布局

java - 带有 db helper 和 recycleView 的完整 android cardView

Android高程 - 相同的值不同的阴影

android - OnPreferenceClickListener : what does the boolean return value do?

java - 如何在 Java/Android 中解析 JSON 日期时间

java - 如何在 Android 中跟踪有关 fragment 的信息

java - SQLite db 重复值 Android

android - ubuntu14.04构建android4.4调制解调器报错

android - 如何在android语音识别中同时使用多种语言

java - 如何使用 Java 在 Android 中生成 Spinner?