轉載自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2017/0914/8514.html
RecyclerView 是一個更高級的 ListView ,它可以重用view避免額外創建太多的view從而帶來流暢的滾動性能。RecyclerView通過叫做 View pool 的東西持有不再可見的 view ,讓它可被回收。
有時我們需要使用嵌套的RecyclerView來創建某些布局。比如在一個垂直的RecyclerView中嵌套水平的RecyclerView。
image
從圖中可以看到一個帶橫向滾動列表的垂直滾動列表。這是通過在一個recyclerView中嵌套另一個recyclerView來實現的。
當用戶滾動橫向列表的時候,inner RecyclerView可以流暢的滾動。但是當垂直滾動的時候, inner RecyclerView 中的每個view再次inflated了一遍,從而感覺很卡頓。這是因為每個嵌套的 RecyclerViews 都有各自的 view pool。
我們可以為所有 inner RecyclerView 設置一個單一的 view pool ,從而解決這個問題。
使用RecyclerView.setRecycledViewPool(RecycledViewPool) 方法可以幫助你設置一個自定義的 view pool,代碼如下:
public OuterRecyclerViewAdapter(List<Item> items) {
//Constructor stuff
viewPool = new RecyclerView.RecycledViewPool();
}
...
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//Create viewHolder etc
holder.innerRecyclerView.setRecycledViewPool(viewPool);
}
現在所有的 inner RecyclerView都是同一個 view pool了。這樣就大大的減少了view的創建,提高了滾動性能
其他問題:錯誤,位置保存 https://juejin.im/entry/59706c336fb9a06bb874b0e3