RecyclerView使用BRVAH完成分組布局效果

效果

展示在手機(jī)上效果:

示例效果圖

服務(wù)器返回的數(shù)據(jù):

示例服務(wù)器返回?cái)?shù)據(jù)

思路

思路一:
   固定寫(xiě)死在xml中马澈,然后根據(jù)相對(duì)應(yīng)的去賦值痊班,但是,這樣耗時(shí)并且不夠靈活馒胆,如果當(dāng)前json一旦改變那么凝果,需要在操作,果斷放棄型雳、
思路二:
ReyclerView多套布局實(shí)現(xiàn)。針對(duì)于這樣json沿量,需要人為干預(yù)一下服務(wù)器返回的數(shù)據(jù)源冤荆,通過(guò)for循環(huán)遍歷匙赞,在每一個(gè)photoGroupID改變之前,
添加新的數(shù)據(jù)源芥被,以此當(dāng)做第二套布局等等等來(lái)完成坐榆,不是此處重點(diǎn)、
思路三:
借助BRVAH框架中對(duì)于Section分組布局來(lái)完成

分析

正常使用RecyclerView考慮一下幾點(diǎn):
(1) item條目布局樣式
(2) 實(shí)體類匹中、
(3)適配器豪诲、
(4)數(shù)據(jù)源樣式屎篱、

(1)item條目布局樣式

該項(xiàng)比較簡(jiǎn)單,根據(jù)效果圖重虑,不難看出應(yīng)該準(zhǔn)備兩套布局秦士、
第一套(分組布局頭):


分組布局頭

第二套(分布布局內(nèi)容):


分組布局內(nèi)容

比較簡(jiǎn)單隧土,寫(xiě)xml就ok 了

(2)實(shí)體類

一般的RecyclerView需求中次洼,建立一個(gè)bean:

public class PhotoItemBean{
        private int PhotoGroupID;
        private String PhotoGroupName;
        private int PhotoID;
        private String PhotoName;
        private String ImgUrl;
...set/get方法這里忽略了...
}

但是需要添加進(jìn)行加一層處理,可以理解為添加一層包裝:

public class ZXPTongGuoXiangXiBean extends SectionEntity<ZXPTongGuoXiangXiSecondInfo.PhotoItemsBean> {
    public ZXPTongGuoXiangXiBean(boolean isHeader, String header) {
        super(isHeader, header);
    }

    public ZXPTongGuoXiangXiBean(ZXPTongGuoXiangXiSecondInfo.PhotoItemsBean photoItemsBean) {
        super(photoItemsBean);
    }
}

自定義一個(gè)類,必須繼承SectionEntity<正常adapter中用到的實(shí)體類>
可以看出提供了兩個(gè)構(gòu)造方法亥啦。一個(gè)是表明是header(包含header的名字),一個(gè)是正常的內(nèi)容

(4)適配器樣式
這里的適配器也替換成如下樣式:

public class ZXPTongGuoXiangXiAdapter extends BaseSectionQuickAdapter<ZXPTongGuoXiangXiBean, BaseViewHolder> {
    /**
     * Same as QuickAdapter#QuickAdapter(Context,int) but with
     * some initialization data.
     *
     * @param layoutResId      The layout resource id of each item.
     * @param sectionHeadResId The section head layout id for each item
     * @param data             A new list is created out of this one to avoid mutable list
     */
    public ZXPTongGuoXiangXiAdapter(int layoutResId, int sectionHeadResId, List<ZXPTongGuoXiangXiBean> data) {
        super(layoutResId, sectionHeadResId, data);
    }

    @Override
    protected void convertHead(BaseViewHolder helper, ZXPTongGuoXiangXiBean item) {
        helper.setText(R.id.textView_ZXPG_XiangXi_TongGuo_Header, item.header);
    }

    @Override
    protected void convert(BaseViewHolder helper, ZXPTongGuoXiangXiBean item) {
        ZXPTongGuoXiangXiSecondInfo.PhotoItemsBean listbean = item.t;
        //省略其他操作,就是配置數(shù)據(jù)的操作
    }
}

可以發(fā)現(xiàn)错妖,需要繼承BaseSectionQuickAdapter適配器疚沐,其中第一個(gè)范型就是重新自定義的類
構(gòu)造函數(shù)也需要傳遞:第一個(gè)是內(nèi)容的layout,第二個(gè)傳遞的是頭布局
然后也有兩個(gè)處理的方法,針對(duì)于頭布局以及內(nèi)容區(qū)域痴施,分別是convertHead與convert的回調(diào)究流。

(5)數(shù)據(jù)源
通過(guò)上述適配器也可以發(fā)現(xiàn)芬探,需要List<ZXPTongGuoXiangXiBean>,但是哩簿,ZXPTongGuoXiangXiBean是自己自定義的一個(gè)類(其繼承了SectionEntity)炎疆,正常網(wǎng)絡(luò)返回的就是文章開(kāi)頭的數(shù)據(jù)結(jié)構(gòu),我建立了PhotoItemsBean全跨,所以這里就需要針對(duì)于json轉(zhuǎn)換成的bean進(jìn)行轉(zhuǎn)換亿遂。一般是寫(xiě)一個(gè)for循環(huán)蛇数。比如我這里就是根據(jù):

for (i in zxpTongGuoXiangXiSecondInfo?.photoItems!!.indices) {
       if (lin_code != zxpTongGuoXiangXiSecondInfo!!.photoItems.get(i).photoGroupID) {
            lin_code = zxpTongGuoXiangXiSecondInfo!!.photoItems.get(i).photoGroupID
           //往數(shù)據(jù)集合中添加
            mList.add(ZXPTongGuoXiangXiBean(true, zxpTongGuoXiangXiSecondInfo?.photoItems?.get(i)?.photoGroupName))
          }
        mList.add(ZXPTongGuoXiangXiBean(zxpTongGuoXiangXiSecondInfo?.photoItems?.get(i)))

  }

遍歷數(shù)據(jù)源耳舅,根據(jù)photGourpID進(jìn)行區(qū)分倚评,如果當(dāng)前的photoGroupID是新的那么就是新的一組馏予,在當(dāng)前位置插入(mList中)一個(gè)頭布局,但是由于在for循環(huán)下呢岗,數(shù)據(jù)源中的數(shù)據(jù)也要繼續(xù)添加蛹尝,否則會(huì)少的。
具體的需要看服務(wù)器返回來(lái)的數(shù)據(jù)進(jìn)行處理挫酿,簡(jiǎn)單講就是在合適的地方插入頭布局饭豹,以此達(dá)到分組的效果务漩、

總結(jié)

該種模式針對(duì)于Section樣式比較簡(jiǎn)單快捷。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翘悉,一起剝皮案震驚了整個(gè)濱河市妖混,隨后出現(xiàn)的幾起案子轮洋,更是在濱河造成了極大的恐慌,老刑警劉巖祥楣,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異汉柒,居然都是意外死亡误褪,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)碾褂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)兽间,“玉大人,你說(shuō)我怎么就攤上這事正塌∴致裕” “怎么了恤溶?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)屎鳍。 經(jīng)常有香客問(wèn)我问裕,道長(zhǎng)逮壁,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任粮宛,我火速辦了婚禮窥淆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘巍杈。我一直安慰自己忧饭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布筷畦。 她就那樣靜靜地躺著词裤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鳖宾。 梳的紋絲不亂的頭發(fā)上吼砂,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音鼎文,去河邊找鬼渔肩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拇惋,可吹牛的內(nèi)容都是我干的周偎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼撑帖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蓉坎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起胡嘿,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蛉艾,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后灶平,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體伺通,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年逢享,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了罐监。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞒爬,死狀恐怖弓柱,靈堂內(nèi)的尸體忽然破棺而出沟堡,到底是詐尸還是另有隱情,我是刑警寧澤矢空,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布航罗,位于F島的核電站,受9級(jí)特大地震影響屁药,放射性物質(zhì)發(fā)生泄漏粥血。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一酿箭、第九天 我趴在偏房一處隱蔽的房頂上張望复亏。 院中可真熱鬧,春花似錦缭嫡、人聲如沸缔御。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)耕突。三九已至,卻和暖如春评架,著一層夾襖步出監(jiān)牢的瞬間眷茁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工古程, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔼卡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓挣磨,卻偏偏與公主長(zhǎng)得像雇逞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茁裙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,101評(píng)論 1 32
  • 這篇文章分三個(gè)部分塘砸,簡(jiǎn)單跟大家講一下 RecyclerView 的常用方法與奇葩用法;工作原理與ListView比...
    LucasAdam閱讀 4,391評(píng)論 0 27
  • 一晤锥、前言: 1. RecyclerView是什么 從Android 5.0開(kāi)始掉蔬,谷歌公司推出了一個(gè)用于大量數(shù)據(jù)展示...
    因?yàn)槲业男?/span>閱讀 1,222評(píng)論 2 2
  • 轉(zhuǎn)載注明出處:http://www.reibang.com/p/4fc6164e4709 概述 官方介紹女轿,Recy...
    王三的貓阿德閱讀 105,881評(píng)論 15 87
  • 我體內(nèi)的山河已開(kāi)始空缺 譬如牙齒,已露出那么多的小洞 譬如頭頂壕翩,那么多的白發(fā)已經(jīng)掉落 這樣的空缺的確讓人無(wú)所適從 ...
    甘肅子溪閱讀 190評(píng)論 1 6