禁用单击 SwipeRefreshLayout 内的 RecyclerView
Disable click on RecyclerView inside a SwipeRefreshLayout
我使用 RecyclerView
实现了 SwipeRefreshLayout
,我需要在 OnRefreshListener
期间禁用我的适配器项目。
我尝试了以下方法,但点击正常:
mRecyclerView.setEnabled(false);
mRecyclerView.setClickable(false);
使用我们在 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());
我使用 RecyclerView
实现了 SwipeRefreshLayout
,我需要在 OnRefreshListener
期间禁用我的适配器项目。
我尝试了以下方法,但点击正常:
mRecyclerView.setEnabled(false);
mRecyclerView.setClickable(false);
使用我们在 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());