轉(zhuǎn)載自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2017/0914/8514.html
RecyclerView 是一個(gè)更高級(jí)的 ListView 秩命,它可以重用view避免額外創(chuàng)建太多的view從而帶來(lái)流暢的滾動(dòng)性能餐禁。RecyclerView通過(guò)叫做 View pool 的東西持有不再可見(jiàn)的 view 翩肌,讓它可被回收蹲诀。
有時(shí)我們需要使用嵌套的RecyclerView來(lái)創(chuàng)建某些布局。比如在一個(gè)垂直的RecyclerView中嵌套水平的RecyclerView三热。
從圖中可以看到一個(gè)帶橫向滾動(dòng)列表的垂直滾動(dòng)列表鼓择。這是通過(guò)在一個(gè)recyclerView中嵌套另一個(gè)recyclerView來(lái)實(shí)現(xiàn)的。
當(dāng)用戶(hù)滾動(dòng)橫向列表的時(shí)候就漾,inner RecyclerView可以流暢的滾動(dòng)呐能。但是當(dāng)垂直滾動(dòng)的時(shí)候, inner RecyclerView 中的每個(gè)view再次inflated了一遍抑堡,從而感覺(jué)很卡頓摆出。這是因?yàn)槊總€(gè)嵌套的 RecyclerViews 都有各自的 view pool。
我們可以為所有 inner RecyclerView 設(shè)置一個(gè)單一的 view pool 首妖,從而解決這個(gè)問(wèn)題偎漫。
使用RecyclerView.setRecycledViewPool(RecycledViewPool) 方法可以幫助你設(shè)置一個(gè)自定義的 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);
}
現(xiàn)在所有的 inner RecyclerView都是同一個(gè) view pool了有缆。這樣就大大的減少了view的創(chuàng)建象踊,提高了滾動(dòng)性能
其他問(wèn)題:錯(cuò)誤,位置保存 https://juejin.im/entry/59706c336fb9a06bb874b0e3