禁用SwipeRefreshLayout中RecyclerView的点击事件

8
我使用RecyclerView实现了一个SwipeRefreshLayout,但是我需要在OnRefreshListener期间禁用适配器项。我尝试了以下方法,但是点击事件仍然正常触发:
mRecyclerView.setEnabled(false);
mRecyclerView.setClickable(false);
1个回答

17

使用我们在ListAdapter中使用的逻辑。这将禁用适配器项,而不是它们的父项。

Translated:

使用我们在 ListAdapter 中使用的逻辑。这将禁用适配器项,而不是它们的父项。

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

实现应该看起来像这样:

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

}

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


运行良好!非常感谢@NikolaDespotoski! - falvojr
2
由于某些原因,它对我不起作用。我不仅可以单击每个项目,而且所有项目在单击时也会同时闪烁。我实现了这个确切的代码,看起来很简单,但是... - iBobb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接