RecyclerView載入複雜布局

2021-10-20 17:59:19 字數 3086 閱讀 2414

github原始碼位址

碼雲原始碼位址

這是nestedscrollview是布局xml,我用的是25.3.1版本,就不會有無法計算裡面recyclerview的高度問題。

//設定滑動慣性

recyclerviewproduct.setnestedscrollingenabled(false);

要記得recyclerview要設定恢復滑動慣性,不然上下滑動沒有慣性了。

//gridlayoutmanager,垂直方向

gridlayoutmanagerproduct = new gridlayoutmanager(this, 3, gridlayoutmanager.vertical, false);

//設定頭部佔3個,其他佔1個

gridlayoutmanagerproduct.setspansizelookup(new gridlayoutmanager.spansizelookup()

else

}});

使用網格布局的話,就用setspansizelookup這個 方法,這個不是說每行3個item,你也能寫6,然後分組頭佔6份,他就佔滿整行寬度了,item寫2份,這樣的話,就能每行3個item。這個自己去試一試就懂了,就是return 多少,佔幾份。

//滑動監聽

nestedscrollview.setonscrollchangelistener(new nestedscrollview.onscrollchangelistener()

}});

4.nestedscrollview的滑動監聽,判斷滑動到底部的方法。

//頭部

public static final int item_head = 0;

//資訊

public static final int item_message = 1;

//public static final int item_image = 2;

//還有別型別

首先把這個布局進行拆分,我將它分為 6 種,像「頭部」部分,還有「資訊」部分,只會出現一次的,其他的就會多出出現,

其實之前,我是將「頭部」和「資訊」放一起,但是這個item太大了,超出2個螢幕高度,導致顯示不全,原因估計是item的高度計算問題,如果不解決問題,可以把item拆成不大於螢幕高度的大小。

@override

public int getitemviewtype(int position)

else if (position == 1)

else if (datas.get(position) instanceof beanimage)

else if (datas.get(position) instanceof beanproduct.beandata)

else if (datas.get(position) instanceof beanother)

else

}

在adapter裡面,要重寫 getitemviewtype 這個方法,這個方法呢,就是根據 item 的下標 position 返回對應的 viewholder,

demo可以看到,「頭部」和「資訊」部分,我能確定他是出現一次,而且位置是固定的,所以,position 為 0 和 1 的時候,我就放回對應的值,其他viewholder 我根據對應的資料型別來放回。

@override

public recyclerview.viewholder oncreateviewholder(viewgroup parent, int viewtype)

..

//還有別的型別,省略

}

adapter必須重新的 oncreateviewholder 這個 方法,給我們乙個引數 int viewtype,這個引數就是上面 getitemviewtype 這個方法判斷型別後返回的值,我們根據這個值,來 create 對應的 viewholder。

@override

public void onattachedtorecyclerview(recyclerview recyclerview)

else if (item_other == getitemviewtype(position))

else

}});}}

adapter再寫乙個方法 onattachedtorecyclerview,這個方法就能獲取到recyclerview ,然後再獲取到 對應的layoutmanager,複製的布局,一般都是用網格(gridlayoutmanager),或者瀑布流( staggeredgridlayoutmanager)

這個看自己的需求了,獲取到之後,再根據position對應的viewholder,設定他們的佔位值(我理解的)。

//滑動監聽

recyclerview.addonscrolllistener(new recyclerview.onscrolllistener()

}});

最後來個recyclerview的滑動到底部,可靠的方法。

這個demo用原始的方法,繼承 recyclerview.adapter ,將方法乙個個重寫,好處就是讓你理解recyclerview,可以實現複雜的布局復用,缺點就是寫起來,有點費時間,不過學習嘛,搞懂了再去用開源框架。

介紹一些可能用的到的

baserecyclerviewadapterhelper

swipelayout 滑動(刪除)選單

swipelayout 滑動(刪除)選單

recyclerview底部載入方案

因為專案中多個列表都需要用到底部載入,所以我想了乙個簡單的底部載入方案。先分析一下整個底部載入過程吧,首先為recyclerview設定滑動監聽,recyclerview滑動時判斷是否到達底部,到達就呼叫載入更多的方法。另外,還要控制載入過程的同步。實現 1.建立了乙個類用來管理整個底部載入過程 p...

RecyclerView載入多種布局

因公司需求,需要對條碼資料進行資料查詢,但是返回的結果是多種型別的,所以需要根據返回的資料型別進行不同布局的顯示。所以就需要用到多布局載入 網上也找到了很多的文章,但是就是無法實現我想要的效果,根據一上午的折騰終於將完成了我的需求,廢話也不多說,直接進入主題 首先我們需要知道recyclerview...

RecyclerView 資料預載入動畫

1.空布局 2.adapter定義兩個變數乙個表示有資料的布局,乙個表示無資料的布局 private static final int type only font 0 文字 private static final int empty view 1 空布局3.重寫adaper中的getitemvi...