如何从getFilter方法获得正确的商品位置?

时间:2018-09-20 15:35:55

标签: android android-recyclerview recycler-adapter searchview

在我的应用中,我有一个RecyclerView,在其中我使用了与SearchView一起使用的get过滤器方法。

现在,我要执行的操作是在RecyclerView中搜索一个项目,并能够在滑动时将其删除,但是主要问题是搜索到的项目的位置一直为0。

那么我该如何找到要删除的项目的正确位置?

这是我的适配器代码:

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


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

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

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


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

    ItemAdapter(ArrayList<ItemModel> exampleList){
        variantiConstructors = exampleList;
        mFilteredList = variantiConstructors;
    }

    @Override
    public void onBindViewHolder(@NonNull final ItemAdapter.ExampleViewHolder holder, @SuppressLint("RecyclerView") final int position) {
        final ItemModel item = variantiConstructors.get(position);

        holder.desc.setText(item.getCodiceArticolo());
        holder.qta.setText(item.getQta());

        holder.qta.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                variantiConstructors.get(position).setQta(holder.qta.getText().toString());
            }

            @Override
            public void afterTextChanged(Editable editable) {
            }
        });


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

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


    @Override
    public Filter getFilter() {
        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {
                String charString = charSequence.toString();
                if (charString.isEmpty()) {
                    variantiConstructors = mFilteredList;
                } else {
                    ArrayList<ItemModel> filteredList = new ArrayList<>();
                    for (ItemModel movie : mFilteredList) {
                        if (movie.getCodiceArticolo().contains(charString.toLowerCase())) {
                            filteredList.add(movie);
                        }
                    }
                    variantiConstructors = filteredList;
                }

                FilterResults filterResults = new FilterResults();
                filterResults.values = variantiConstructors;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                variantiConstructors = (ArrayList<ItemModel>) filterResults.values;

                notifyDataSetChanged();
            }
        };
    }

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



    public class ExampleViewHolder extends RecyclerView.ViewHolder {

        public TextView desc;
        public EditText qta;

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

            desc = itemView.findViewById(R.id.Desc);
            qta = itemView.findViewById(R.id.Qta);

            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);
                        }
                    }
                }
            });

        }
    }


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



    public void removeAt(int position) {
        variantiConstructors.remove(position);
        notifyItemRemoved(position);
    }


}

0 个答案:

没有答案
相关问题