Java 在RecyclerView中使用微调器过滤自定义ArrayList正在清除整个列表

Java 在RecyclerView中使用微调器过滤自定义ArrayList正在清除整个列表,java,android,android-recyclerview,android-spinner,Java,Android,Android Recyclerview,Android Spinner,我正在尝试根据项目的直径筛选项目列表。直径位于产品名称的字符串中,该字符串是自定义对象的一个元素。到目前为止,当我从微调器中选择直径时,它正在清除列表中的每个项目 微调器逻辑 //Spinner diameterSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelect

我正在尝试根据项目的直径筛选项目列表。直径位于产品名称的字符串中,该字符串是自定义对象的一个元素。到目前为止,当我从微调器中选择直径时,它正在清除列表中的每个项目

微调器逻辑

 //Spinner
        diameterSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Object diameterFilter = spinnerAdapter.getItem(position);
                dAdapter.getFilter().filter(diameterFilter.toString());
                dAdapter.notifyDataSetChanged();
            }

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

            }
        });
//微调器
diameterSpinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
对象直径过滤器=spinnerAdapter.getItem(位置);
dAdapter.getFilter().filter(diameterFilter.toString());
dAdapter.notifyDataSetChanged();
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
适配器上的筛选代码


    //FILTER
    @Override
    public Filter getFilter() {
        return displayFilter;
    }

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

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


                for (Inventory item : displayedListFull){
                    if (item.getProductName().toLowerCase().contains(filterPattern)){
                        filteredList.add(item);
                    }
                }
            }
            FilterResults results = new FilterResults();
            results.values = filteredList;
            return results;
        }

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

//滤器
@凌驾
公共过滤器getFilter(){
返回显示过滤器;
}
专用筛选器displayFilter=新筛选器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
List filteredList=新建ArrayList();
if(constraint==null | | constraint.length()==0){
filteredList.addAll(displayedListFull);
}否则{
String filterPattern=constraint.toString().toLowerCase().trim();
用于(库存项目:displayedListFull){
如果(item.getProductName().toLowerCase().contains(filterPattern)){
filteredList.add(项目);
}
}
}
FilterResults results=新的FilterResults();
results.values=filteredList;
返回结果;
}
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
displayedList.clear();
displayedList.addAll((List)results.values);
notifyDataSetChanged();
}
};

在微调器回调中将
getItem
更改为
getItemAtPosition

diameterSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        Object diameterFilter = spinnerAdapter.getItemAtPosition(position); // here is the change
        dAdapter.getFilter().filter(diameterFilter.toString());
        dAdapter.notifyDataSetChanged();
    }

// rest of your code
diameterSpinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
Object diameterFilter=spinnerAdapter.getItemAtPosition(位置);//这是更改
dAdapter.getFilter().filter(diameterFilter.toString());
dAdapter.notifyDataSetChanged();
}
//代码的其余部分

getItemAtPosition不是spinnerAdapter上的选项。我需要修复什么才能允许此操作?您是否有自定义spinner适配器或
ArrayAdapter
?我正在使用ArrayAdapter您确定
diameterFilter.toString()吗
返回预期值?我设置了一个自定义适配器,并将Log.d放在diameterFilter上,以确保字符串符合预期值。我仍然会在筛选列表后立即将其清除。这种精确的筛选逻辑适用于searchview,但由于某些原因,无法使用微调器。