TheDevMan
TheDevMan

Reputation: 5954

Remove an item from recyclerviewAdapter in android

I am trying remove an item from RecyclerView the animation is happening but the item is not getting cleared. I get the same item showing up evening after I do the following:

notifyItemRemoved(favlistTransID);
notifyItemRangeChanged(favlistTransID, 1);

Here is what I trying to do:

I have recyclebin image icon when i click on it the I call an API to delete the require item on cloud server and clear it from RecyclerView.

Inside: Adapter that extends: RecyclerView.Adapter<FavouriteList_Adapter_Recycler.WishListViewHolder>

I have the following code:

@Override
    public void onBindViewHolder(WishListViewHolder personViewHolder, int i)
    {
        contactNameText = favlistDetails.get(i).getname().toString();
        tempURL = favlistDetails.get(i).getImage().toString();
        favlistTransID = favlistDetails.get(i).getfavtransID().toString();

        mContext = personViewHolder.image.getContext();

        TAG_MESSAGE = mContext.getResources().getString(R.string.tagmessage);

        favDB = new favContactsDB(mContext);
        customerID = favDB.getCustID();

        if (tempURL.equalsIgnoreCase(""))
        {
            Picasso.with(mContext).load(url).placeholder(R.drawable.none).error(R.drawable.none).centerCrop().resize(218, 230).into(personViewHolder.image);
        }
        else
        {
            Picasso.with(mContext).load(favlistDetails.get(i).getImage().toString()).placeholder(R.drawable.none).error(R.drawable.none).centerCrop().resize(218, 230).into(personViewHolder.image);
        }

        personViewHolder.removeFav.setTag(i);
        personViewHolder.removeFav.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {

                Integer taggedPosition = (Integer) v.getTag();
                Log.e("Position::-", Integer.toString(taggedPosition));

                removeWish(taggedPosition);
            }
        });
    }

//Removing from API and remove item from list:

    private void removeWish(final int wishlistTransID)
    {

        final RequestParams requestParams = new RequestParams();
        requestParams.put("tokenValue", mContext.getResources().getString(R.string.tokenvalue));
        requestParams.put("FavTranID", favlistDetails.get(favlistTransID).getfavtransID().toString());
        requestParams.put("ContactID", customerID);

        final String uploadWebsite = mContext.getResources().getString(R.string.removefavitem);

        AsyncHttpClient client = new AsyncHttpClient();
        client.post(uploadWebsite, requestParams, new JsonHttpResponseHandler()
        {
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response)
            {
                try
                {
                    success = response.getString(TAG_MESSAGE);

                    if (success.equalsIgnoreCase(mContext.getResources().getString(R.string.message)))
                    {                           favDB.deletefavouritedetails(favlistDetails.get(favlistTransID).getname().toString());

                        Toast.makeText(mContext, mContext.getResources().getString(R.string.removefav), Toast.LENGTH_SHORT).show();

                        notifyItemRemoved(favlistTransID);
                        notifyItemRangeChanged(favlistTransID, 1);
                    }
                    else
                    {
                        Toast.makeText(mContext, mContext.getResources().getString(R.string.errorwish), Toast.LENGTH_SHORT).show();
                    }
                }
                catch (JSONException e)
                {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse)
            {
                super.onFailure(statusCode, headers, throwable, errorResponse);
                Toast.makeText(mContext, mContext.getResources().getString(R.string.error_server), Toast.LENGTH_SHORT).show();
            }
        });
    }

Not sure what is wrong?

Can somebody help me with this been struggling for last two days?

Thanks!

Upvotes: 1

Views: 127

Answers (1)

harshitpthk
harshitpthk

Reputation: 4136

You are not removing the item from the data source, you would have to remove the item from favlistDetails and then call notifyItemRemoved();

in your onSuccess method remove the item from the DataSource

if (success.equalsIgnoreCase(mContext.getResources().getString(R.string.message)))
                {                           favDB.deletefavouritedetails(favlistDetails.get(favlistTransID).getname().toString());

                    Toast.makeText(mContext, mContext.getResources().getString(R.string.removefav), Toast.LENGTH_SHORT).show();
                    favlistDetails.remove(favlistTransID);
                    notifyItemRemoved(favlistTransID);
                    notifyItemRangeChanged(favlistTransID, 1);
                }

Upvotes: 3

Related Questions