Removed recycler item shows up again after deleting other

…衆ロ難τιáo~ 提交于 2021-01-13 09:23:20

问题


I am making CURD Activity intergarted with my servers api.

In start of the activity, I am fetching ArrayList of data from server and setting up in recycler view like this

custmerListAdapter = new CustomerListAdapter(customerListSuitcases, context);
        customerList_recyclerView.setAdapter(custmerListAdapter);

Theere is a three where there is one options :- Delete

Note:- I am trying not to hit api every time app connect with server. See, only hot api one time when connect with server for tht task and I have to reload the server data for the latest data, So instead of doing this, I am locally deleting the the item as per the user deleted, So there would be an easy for app and not time consuming.

So, say I have three item, If i delete 3 item and it deleted successfully and when I try to delete the secong item it deletd from recyclerview and server but the 3 item shows up again, And the for same for 1 item, 3 does't shows up but 2 shows up.

The server api is all right I have checked , The problem is with the recycycler view adapter.

Here is the adapter

public class CustomerListAdapter extends RecyclerView.Adapter<CustomerListAdapter.ViewHolder> implements Filterable
{
    private ArrayList<ListSuitcase> customerListSuitcases = new ArrayList<>();
    private Context context;
    private OnMoreOptionsClickListener onMoreOptionsClickListener;
    private OnItemClickListener onItemClickListener;
    private TextFilter textFilter;
    private ArrayList<ListSuitcase> mStringFilterList = new ArrayList<>();

    public CustomerListAdapter(ArrayList<ListSuitcase> customerListSuitcases, Context context) {
        this.customerListSuitcases = customerListSuitcases;
        this.context = context;
        this.mStringFilterList = customerListSuitcases;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.customer_list_items , parent , false) , onMoreOptionsClickListener , onItemClickListener);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position)
    {
        holder.customer_name.setText(customerListSuitcases.get(position).FirmName);

        if (customerListSuitcases.get(position).GstNo.equals("URP"))
        {
            holder.tv_urp.setVisibility(View.VISIBLE);
        }else
        {
            holder.tv_urp.setVisibility(View.GONE);
        }

    }

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

    @Override
    public Filter getFilter() {
        if (textFilter == null) {
            textFilter = new TextFilter();
        }
        return textFilter;
    }

    public void deleteCustomer(int position)
    {
        customerListSuitcases.remove(position);
        notifyItemRemoved(position);
        notifyItemRangeChanged(position, customerListSuitcases.size());
    }

    public void addData(ListSuitcase listSuitcase)
    {
        customerListSuitcases.add(listSuitcase);
        notifyDataSetChanged();
    }

    public void editData(int position , ListSuitcase listSuitcase)
    {
        customerListSuitcases.remove(position);
        customerListSuitcases.add(listSuitcase);
        notifyDataSetChanged();
    }

    public class ViewHolder extends RecyclerView.ViewHolder
    {
        TextView customer_name , tv_urp;
        ImageButton more_options;
        OnMoreOptionsClickListener onMoreOptionsClickListener;
        MaterialCardView root_cardView;
        OnItemClickListener onItemClickListener;

        public ViewHolder(@NonNull View itemView , OnMoreOptionsClickListener onMoreOptionsClickListener , OnItemClickListener onItemClickListener)
        {
            super(itemView);
            this.onMoreOptionsClickListener = onMoreOptionsClickListener;
            this.onItemClickListener = onItemClickListener;
            more_options = itemView.findViewById(R.id.more_options);
            customer_name = itemView.findViewById(R.id.customer_name);
            root_cardView = itemView.findViewById(R.id.root_cardView);
            tv_urp = itemView.findViewById(R.id.tv_urp);

            more_options.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view)
                {
                    ImpMethods.oneTimeClickCountdown(view);
                    if (onMoreOptionsClickListener != null)
                    onMoreOptionsClickListener.OnMoreOptionsClick(getAdapterPosition() , more_options , customerListSuitcases.get(getAdapterPosition()));
                }
            });

            root_cardView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view)
                {
                    ImpMethods.oneTimeClickCountdown(view);
                    if (onItemClickListener != null)
                    onItemClickListener.OnItemClick(getAdapterPosition() , root_cardView , customerListSuitcases.get(getAdapterPosition()));
                }
            });
        }
    }

    public void updateList(ArrayList<ListSuitcase> listSuitcases)
    {
        customerListSuitcases = listSuitcases;
        notifyDataSetChanged();
    }

    public ArrayList<ListSuitcase> getCustomerListSuitcases() {
        return customerListSuitcases;
    }

    public interface OnMoreOptionsClickListener
    {
        void OnMoreOptionsClick(int position , View v , ListSuitcase customerListSuitcase);
    }

    public void setOnMoreOptionsClickListener(OnMoreOptionsClickListener onMoreOptionsClickListener)
    {
        this.onMoreOptionsClickListener = onMoreOptionsClickListener;
    }

    public void setOnItemClickListener(OnItemClickListener onItemClickListener)
    {
        this.onItemClickListener = onItemClickListener;
    }

    public interface OnItemClickListener
    {
        void OnItemClick(int position , View v , ListSuitcase customerListSuitcase);
    }

    private class TextFilter extends Filter
    {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            constraint = constraint.toString().toLowerCase();
            FilterResults result = new FilterResults();
            ArrayList<ListSuitcase> f = new ArrayList<>();
            ArrayList<ListSuitcase> p = new ArrayList<>();
            for (ListSuitcase listSuitcase : mStringFilterList)
            {
                p.add(listSuitcase);
            }
            if (constraint != null && constraint.toString().length() > 0) {
                for (int i = 0; i < p.size(); i++) {
                    ListSuitcase listSuitcase = p.get(i);
                    if (listSuitcase.FirmName.toLowerCase().contains(constraint))
                        f.add(listSuitcase);
                }
                result.count = f.size();
                result.values = f;
            } else {
                result.values = p;
                result.count = p.size();
            }
            return result;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            customerListSuitcases = (ArrayList<ListSuitcase>) results.values;
            notifyDataSetChanged();
        }

    }

}

Go for deleteCustomer method

I am struggling to solve this but can't.

来源:https://stackoverflow.com/questions/65473066/removed-recycler-item-shows-up-again-after-deleting-other

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!