Android RecyclerView StaggeredGridLayoutManager瀑布流item位置變換問題解決
阿新 • • 發佈:2018-11-08
瀑布流 位置變換網上一搜一堆 全是一下這種方法,然而還是會有問題
manager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE); //防止item 交換位置 recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView,newState); manager.invalidateSpanAssignments(); //防止第一行到頂部有空白區域 } });
其實可以不用寫這兩種方法,就可以解決了。
在請求到資料之後,我們一般是用
Adapter.notifyDataSetChanged();
但是瀑布流,這裡我們需要換一種方法就是
Adapter.notifyItemInserted(mPosition);
這個mPosition就是載入新資料的第一個position
這樣就可以完美解決item變換的問題了,完美。
其次就是要注意:
if (mHeights.size() <= position) { mHeights.add((int) (height / ((float) width / (StringUtil.getWidths(context) / 2 - 30)))); } StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) holder.rlAll.getLayoutParams(); params.height = mHeights.get(position); holder.rlAll.setLayoutParams(params);
1.介面卡裡面的寬高需要用集合存起來,防止複用的時候重新計算高度出現問題
2.一定要先計算高度,然後載入圖片(切記)
還有其他問題歡迎探討!QQ 240272348