禁用点击RecyclerView一个SwipeRefreshLayout内RecyclerView、SwipeRefreshLayout

2023-09-05 11:29:37 作者:过客

我实现了一个 SwipeRefreshLayout 使用 RecyclerView ,我需要一个在 OnRefreshListener 。

我尝试以下方法,但点击通常发生:

  mRecyclerView.setEnabled(假);
mRecyclerView.setClickable(假);
 

解决方案

使用逻辑,我们曾与 ListAdapter 。这将禁用适配器的项目,而不是他们的父母。

 公共接口RecyclerViewItemEnabler {
  公共布尔isAllItemsEnabled();
  公共布尔getItemEnabled(INT位);
}
 
怎么查看自己版本的recyclerview

和实施应该是这样的:

 公共类RecyclerAdapter扩展RecyclerView.Adapter< RecyclerView.ViewHolder>实现RecyclerViewItemEnabler {

    @覆盖
    公共无效onViewAttachedToWindow(RecyclerView.ViewHolder持有者){
        super.onViewAttachedToWindow(保持器);
        holder.itemView.setEnabled(isAllItemsEnabled());
        //或为此在onBindViewHolder()
    }
    @覆盖
    公共布尔isAllItemsEnabled(){返回mAllEnabled; }

    @覆盖
    公共布尔getItemEnabled(INT位置){
       返回true;
    }
    公共无效setAllItemsEnabled(布尔启用){
      mAllEnabled =启用;
      notifyItemRangeChanged(0,getItemCount());
    }

}
 

使用方法: mRecylerAdapter.setAllItemsEnabled(mSwipeRefreshLayout.isRefreshing()!);

I implemented a SwipeRefreshLayout using a RecyclerView and I need that my adapter items are disabled during the OnRefreshListener.

I tried the following approach, but the click occurs normally:

mRecyclerView.setEnabled(false);
mRecyclerView.setClickable(false);

解决方案

Use logic we had with ListAdapter. This will disable adapter items, instead their parent.

public interface RecyclerViewItemEnabler{
  public boolean isAllItemsEnabled();
  public boolean getItemEnabled(int position);
}

And implementation should look like this:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements RecyclerViewItemEnabler{

    @Override
    public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) {
        super.onViewAttachedToWindow(holder);
        holder.itemView.setEnabled(isAllItemsEnabled());
        //or do this in onBindViewHolder()
    }
    @Override
    public boolean isAllItemsEnabled(){ return mAllEnabled; }

    @Override
    public boolean getItemEnabled(int position){
       return true;
    }
    public void setAllItemsEnabled(boolean enable){
      mAllEnabled = enable;
      notifyItemRangeChanged(0, getItemCount());
    }

}

Usage: mRecylerAdapter.setAllItemsEnabled(!mSwipeRefreshLayout.isRefreshing());