Android SearchView从RecyclerView添加错误的项目

Android SearchView从RecyclerView添加错误的项目,android,android-recyclerview,Android,Android Recyclerview,事实上,我正在尝试在我的RecyclerView中添加一个SearchView,允许在其上搜索不同种类的项目 但是当我在SearchView中搜索一个结果时,我遇到了一个问题,当我点击它时,它被找到了所选的项目是错误的或更好的,它是来自主数组列表的项目,而不是搜索结果,正如你在下面的gif中所看到的,我正在搜索Bayles,当我按下它的快捷键时,它说我已经选择了Bayles,但当我将其作为子项添加到另一个recyclerView它添加了ABBONDANTE而不是Bayles 这是适配器中的我的

事实上,我正在尝试在我的RecyclerView中添加一个SearchView,允许在其上搜索不同种类的项目

但是当我在SearchView中搜索一个结果时,我遇到了一个问题,当我点击它时,它被找到了所选的项目是错误的或更好的,它是来自主数组列表的项目,而不是搜索结果,正如你在下面的gif中所看到的,我正在搜索Bayles,当我按下它的快捷键时,它说我已经选择了Bayles,但当我将其作为子项添加到另一个recyclerView它添加了ABBONDANTE而不是Bayles

这是适配器中的我的ViewHolder

itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(listener != null){
                    int position = getAdapterPosition();
                    if(position != RecyclerView.NO_POSITION){
                        listener.onItemClick(position);
                        Snackbar.make(v,variantiConstructors.get(position).getDeskT(),Snackbar.LENGTH_SHORT).show();
                    }
                }
            }
        });
这是我在活动中将项目添加到其他RecyclerView中的onClickListener

   adapterVarianti.setOnItemClickListener(new AdapterVarianti.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {

                search.clearFocus();

                if (dummyDataItems.size() != 0) {

                    if (tipo.toString().equals("CON ") || tipo.toString().equals("PIU' ") || tipo.toString().equals("MENO ") || tipo.toString().equals("SENZA ")) {

// Here i'm adding the selected item to a String builder but i think it's here where i'm doing something wrong

                        tipo.append(filteredVariable.get(position).getDeskT());

// Adding item from the recyclerView where there is searchView to last item from the recyclerView on background.

                        ItemPTERM lastAdded = dummyDataItems.get(dummyDataItems.size() - 1);
                        lastAdded.setVariant(new Variant(tipo.toString()));

                        if (exampleAdapter.getItemCount() > 0) {
                            mRecyclerViewTOP.scrollToPosition(exampleAdapter.getItemCount() - 1);
                        }
                        exampleAdapter.notifyDataSetChanged();

                        tipo = new StringBuilder();

                        if(segmentedButtonGroup.getPosition() == 0){
                            tipo = new StringBuilder();
                            tipo.append("CON ");
                        }
                        if(segmentedButtonGroup.getPosition() == 1){
                            tipo = new StringBuilder();
                            tipo.append("PIU' ");
                        }
                        if(segmentedButtonGroup.getPosition() == 2){
                            tipo = new StringBuilder();
                            tipo.append("MENO ");
                        }
                        if(segmentedButtonGroup.getPosition() == 3){
                            tipo = new StringBuilder();
                            tipo.append("SENZA ");
                        }

                    }
                }
            }
        });
这是我的带有过滤器的适配器代码

public class AdapterVarianti extends RecyclerView.Adapter<AdapterVarianti.ExampleViewHolder>  implements Filterable {


    private ArrayList<VariantiConstructor> variantiConstructors;
    private ArrayList<VariantiConstructor> mFilteredList;
    private OnItemClickListener mListener;

    public interface  OnItemClickListener{
        void onItemClick(int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener){
        mListener = listener;
    }

    @NonNull
    @Override
    public AdapterVarianti.ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.varianti_recycler,parent,false);
        RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        v.setLayoutParams(lp);
        return new AdapterVarianti.ExampleViewHolder(v, mListener);
    }

    AdapterVarianti(ArrayList<VariantiConstructor> exampleList){
        variantiConstructors = exampleList;
        mFilteredList = variantiConstructors;
    }

    @Override
    public void onBindViewHolder(@NonNull final AdapterVarianti.ExampleViewHolder holder, final int position) {
        final VariantiConstructor item = variantiConstructors.get(position);

        holder.desc.setText(item.getDeskT());
        holder.prepiu.setText(String.valueOf(item.getPrice()));
        holder.premeno.setText(String.valueOf(item.getPacq()));

        if(position % 2 == 0 ){
            holder.itemView.setBackgroundColor(Color.parseColor("#17e1a0"));

        }else if(position % 2 == 1){
            holder.itemView.setBackgroundColor(Color.parseColor("#7EC0EE"));
        }

    }


    @Override
    public Filter getFilter() {
        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                final FilterResults oReturn = new FilterResults();
                final ArrayList<VariantiConstructor> results = new ArrayList<>();
                if (mFilteredList == null)
                    mFilteredList = new ArrayList<>(variantiConstructors);
                if (constraint != null && constraint.length() > 0) {
                    if (mFilteredList != null && mFilteredList.size() > 0) {
                        for (final VariantiConstructor cd : mFilteredList) {
                            if (cd.getDeskT().toLowerCase()
                                    .contains(constraint.toString().toLowerCase()))
                                results.add(cd);
                        }
                    }
                    oReturn.values = results;
                    oReturn.count = results.size(); //newly Aded by ZA
                } else {
                    oReturn.values = mFilteredList;
                    oReturn.count = mFilteredList.size(); //newly added by ZA
                }
                return oReturn;
            }

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(final CharSequence constraint,
                                          FilterResults results) {
                variantiConstructors = new ArrayList<>((ArrayList<VariantiConstructor>) results.values);
                // FIXME: 8/16/2017 implement Comparable with sort below
                ///Collections.sort(itemList);
                notifyDataSetChanged();
            }
        };
    }

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

    public class ExampleViewHolder extends RecyclerView.ViewHolder {

        public TextView desc;
        public TextView prepiu;
        public TextView premeno;

        ExampleViewHolder(View itemView, final OnItemClickListener listener) {
            super(itemView);

            desc = itemView.findViewById(R.id.Desc);
            prepiu = itemView.findViewById(R.id.PrePiu);
            premeno = itemView.findViewById(R.id.PreMeno);


            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(listener != null){
                        int position = getAdapterPosition();
                        if(position != RecyclerView.NO_POSITION){
                            listener.onItemClick(position);
                            Snackbar.make(v,variantiConstructors.get(position).getDeskT(),Snackbar.LENGTH_SHORT).show();
                        }
                    }
                }
            });


        }
    }


}
公共类AdapterVarianti扩展了RecyclerView。适配器实现可过滤{
私有数组列表变量构造函数;
私人阵列列表mFilteredList;
私人监听者;
公共接口侦听器{
无效单击(内部位置);
}
公共void setOnItemClickListener(OnItemClickListener侦听器){
mListener=监听器;
}
@非空
@凌驾
public AdapterVarianti.ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.varianti_recycler,parent,false);
RecyclerView.LayoutParams lp=新的RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_父级,ViewGroup.LayoutParams.WRAP_内容);
v、 setLayoutParams(lp);
返回新的AdapterVarianti.ExampleViewHolder(v,mListener);
}
AdapterVarianti(ArrayList示例列表){
variantiConstructors=示例列表;
mFilteredList=方差构造函数;
}
@凌驾
BindViewHolder上的公共无效(@NonNull final AdapterVarianti.ExampleViewHolder holder,final int位置){
最终VariantConstructor项目=VariantConstructors.get(位置);
holder.desc.setText(item.getDeskT());
holder.prepiu.setText(String.valueOf(item.getPrice());
holder.premeno.setText(String.valueOf(item.getPacq());
如果(位置%2==0){
holder.itemView.setBackgroundColor(Color.parseColor(“#17e1a0”);
}否则如果(位置%2==1){
holder.itemView.setBackgroundColor(Color.parseColor(“#7EC0EE”);
}
}
@凌驾
公共过滤器getFilter(){
返回新筛选器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
final FilterResults oReturn=新的FilterResults();
最终ArrayList结果=新建ArrayList();
if(mFilteredList==null)
mFilteredList=新阵列列表(VarianticConstructors);
if(constraint!=null&&constraint.length()>0){
if(mFilteredList!=null&&mFilteredList.size()>0){
用于(最终差异构造器cd:mFilteredList){
if(cd.getDeskT().toLowerCase())
.contains(constraint.toString().toLowerCase())
结果:添加(cd);
}
}
oReturn.values=结果;
oReturn.count=results.size();//由ZA新添加
}否则{
oReturn.values=mFilteredList;
oReturn.count=mFilteredList.size();//由ZA新添加
}
返回或返回;
}
@抑制警告(“未选中”)
@凌驾
受保护的void publishResults(最终字符序列约束,
FilterResults(结果){
variantiConstructors=新的ArrayList((ArrayList)results.values);
//修正日期:2017年8月16日实施,与下文排序相当
///Collections.sort(itemList);
notifyDataSetChanged();
}
};
}
@凌驾
public int getItemCount(){
返回variantiConstructors.size();
}
公共类示例ViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图描述;
公共文本视图预处理;
公共文本视图premeno;
示例ViewHolder(视图项视图、最终侦听器){
超级(项目视图);
desc=itemView.findviewbyd(R.id.desc);
prepiu=itemView.findviewbyd(R.id.prepiu);
premeno=itemView.findviewbyd(R.id.premeno);
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(侦听器!=null){
int position=getAdapterPosition();
如果(位置!=RecyclerView.无位置){
listener.onItemClick(位置);
Snackbar.make(v,variantiConstructors.get(position.getDeskT(),Snackbar.LENGTH_SHORT.show();
}
}
}
});
}
}
}

通过以下代码将列表再次传递给“活动”来解决:

public ArrayList<VariantiConstructor> getList(){
    return variantiConstructors;
}

搜索时如何隐藏项目?@TruongHieu我使用过滤器,添加了我的完整适配器code@TruongHieu我几乎可以肯定问题在于我在活动中使用了什么filteredVariable.get(position).getDeskT(),而我应该从适配器传递过滤后的ArrayList,因为我的“filteredVariable”是包含所有项的ArrayList。
 tipo.append(adapterVarianti.getList().get(position).getDeskT());