How to access adapter delete button into activity?

时光怂恿深爱的人放手 提交于 2020-06-09 05:32:26

问题


I have a RecyclerView and adapter. Now in that adapter, I'm inflating one row. In that row, there are one delete button and one progressbar. So what I'm doing is when user clicks on delete button, I make invisible that delete button, and make visible small progress bar in place of delete button from Adapter class. And also I'm sending position via listener to that attached activity, from that I'm calling AsyncTask.

Now the problem is:

When I got to know via AsyncTask that item is deleted, I again want to make visible delete button and to make invisible progressbar. But this time - from Activity (not from adapter), because I want to do something in activity when I get to know that item is deleted. So I can't implement AsyncTask in adapter.

code:

Adapter

  delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (listener != null) {
                        delete.setVisibility(View.GONE);
                        progressBar.setVisibility(View.VISIBLE);
                        listener.onClicked(getAdapterPosition(), eventList.get(getAdapterPosition()).getEventId());
                    }
                }
            });

Activity (in activity I want to visible/invisible adapter row button and p.bar:

 @Override
    public void onDeleteDataReceived(Boolean status, int position) {
        stopShimmerLayout();
        if (status) {
            try {
                eventsList.remove(position);
                mAdapter.notifyItemRemoved(position);
                showToast(context, "Deleted", Toast.LENGTH_SHORT);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            showToast(context, "Failed", Toast.LENGTH_SHORT);
        }
    }

See the video for better understanding: https://drive.google.com/open?id=13ZAtnyfGbi2X4JjUTmJsIDy-gt5y51Gr


回答1:


To fix your problem you can take the below approach.

1) Inside your Eventpojo/model class, declare a boolean isSelectedwhich will be initially false. Now whenever user clicks the row, do `

delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
eventList.get(position).isSelected=true;
delete.setVisibility(View.GONE);
progressBar.setVisibility(View.VISIBLE);
}

So by doing this, we are keeping in memory which object is selected and which is not, but once you recycle your views bindViewHolder will be invoked aagain and UI elements setter will be called again so put a check inside onBindViewHolder()

if(eventList.get(position).isSelected){
    //show progress bar
}else{
   // show delete icon
}

To remove the item, just do the following changes in your adapter-

public void removeItem(int position){
    eventList.remove(position)
    notifyItemRemoved(position)
}


来源:https://stackoverflow.com/questions/61842770/how-to-access-adapter-delete-button-into-activity

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