如何访问适配器删除按钮进入活动状态? [英] How to access adapter delete button into activity?

查看:70
本文介绍了如何访问适配器删除按钮进入活动状态?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个RecyclerView和适配器.现在在该适配器中,我要膨胀一行.在该行中,有一个删除按钮和一个进度条.因此,我要做的是,当用户单击删除"按钮时,使该删除按钮不可见,并在 Adapter 类中使可见的小进度条代替删除"按钮.而且,我正在通过侦听器将位置发送到该附加的活动,即所谓的AsyncTask.

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.

现在问题是:

当我通过AsyncTask知道该项目已删除时,我再次想使可见的删除按钮和不可见的进度栏成为可能.但是这次-从活动(不是从适配器)开始,因为当我知道该项目已删除时,我想在活动中做一些事情.所以我不能在适配器中实现AsyncTask.

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.

代码:

适配器

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

活动(在活动中,我要显示/不显示适配器行按钮和p.bar:

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

观看视频以更好地理解: https://drive.google.com/open?id = 13ZAtnyfGbi2X4JjUTmJsIDy-gt5y51Gr

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

推荐答案

要解决您的问题,您可以采用以下方法.

To fix your problem you can take the below approach.

1)在您的Event pojo/model类中,声明一个布尔值isSelected,该布尔值最初将为false.现在,每当用户单击该行时,请执行

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

因此,我们将选择的对象与未选择的对象保留在内存中,但是一旦您回收视图,就会再次调用bindViewHolder并再次调用UI元素setter,因此请在onBindViewHolder()中放入一个检查/p>

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

这篇关于如何访问适配器删除按钮进入活动状态?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆