SwipeRefreshLayout+RecyclerView滑動衝突解決
偶然間發現的bug
場景如下:
recyclerView使用了頭部view的邏輯。具體adapter就不介紹了,具體可以去看我的TreeRecycleView庫。大致就是添加了一個頭部view
ImageViewimageView = new ImageView(getContext()); imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); headerAndFootWrapper.addHeaderView(imageView);
我的需求,根據伺服器返回的資料。動態設定頭部顯示隱藏
public void setBanner(String url) { if (TextUtils.isEmpty(url)) { imageView.setVisibility(View.GONE); } else { imageView.setVisibility(View.VISIBLE); ImageLoaderUtil.getInstance().loadImage(url, imageView); } }
這時問題出現了:
如果頭部imageView隱藏了。那麼就無法下拉重新整理
如果頭部顯示了,就可以下拉重新整理
那麼問題來了,什麼鬼呢?
研究了一會。
總結如下:
RecycleView的第一個條目的所有View,如果沒有高度(比如用了WRAP_CONTENT)
並且使用了View.Gone
那麼SwipeRefreshLayout的下拉重新整理就不會觸發。因為RecyclerView.childAt(0).getTop()不會返回正常結果。
解決也簡單。
1.添加了頭部View的話。在設定View.GONE的時候記得 notifyDataSetChanged() 重新整理一下