禁用在SwipeRefreshLayout内单击RecyclerView

fal*_*ojr 8 java android android-support-library swiperefreshlayout android-recyclerview

我实现了一个SwipeRefreshLayout使用a RecyclerView,我需要在我期间禁用我的适配器项OnRefreshListener.

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

mRecyclerView.setEnabled(false);
mRecyclerView.setClickable(false);
Run Code Online (Sandbox Code Playgroud)

Nik*_*ski 14

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

public interface RecyclerViewItemEnabler{
  public boolean isAllItemsEnabled();
  public boolean getItemEnabled(int position);
}
Run Code Online (Sandbox Code Playgroud)

实现应该如下所示:

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

}
Run Code Online (Sandbox Code Playgroud)

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

  • 出于某种原因,它对我不起作用.我不仅可以点击每个项目,而且所有项目也会在点击时同时闪烁.我实现了这个确切的代码,似乎很直接,但...... (2认同)