recylerview 開源庫MultiType最簡易的用法/recylerview 混排/recylerview 添加邊距

帶屏煙機(jī)項(xiàng)目中有個這樣的需求,右側(cè)菜譜步驟是頂部是食材的一些信息,底部是做法的步驟,可以劃分為兩個區(qū)域
但是兩個區(qū)域是可以連續(xù)滾動的.
怎么布局呢,
一個linerlayout,下面一個gridview,外部再套一個scrollview,這樣明顯是不可行的,因?yàn)閟crollview 和gridview 嵌套會有沖突,如果偏要這樣做,也可以,就必須解決兩者的沖突.明顯是不可行的.所以可以使用一個recylerview來實(shí)現(xiàn)

image.png

一個recylerview 怎么做呢?listView 可以使用addHeaderView ,但是recylerview 不行哦,得擴(kuò)展recylerview 的功能才行
所以我們使用一個開源庫 :MultiType 傳送門,很強(qiáng)大的一個庫,不過我們只用到了最簡單的用法

     mAdapter = new MultiTypeAdapter();
    //header
    mAdapter.register(SmartCookMaterialInfo.class, new SmartCookStepHeadAdapter());
    //下面的列表
    mAdapter.register(NetStepInfo.StepsBean.class, new SmartCookStepAdapter());
    mRvCook.setAdapter(mAdapter);
    Items allItem = new Items();
    //組裝header 的數(shù)據(jù)
    List<SmartCookMaterialInfo> stepInfoList = new ArrayList<>();
    stepInfoList.add(materialInfo);

    //添加header
    allItem.addAll(stepInfoList);
    //添加下面的列表
    allItem.addAll(netStepInfo);

    mAdapter.setItems(allItem);
    mAdapter.notifyDataSetChanged();

使用方法很簡單
1.new 一個 MultiTypeAdapter
2.注冊兩種不同的類型(之前必須寫好兩個不同類型的adapter)
3.設(shè)置recylerview的adapter
4.分別添加頂部步驟的信息和底部的步驟信息
5.設(shè)置數(shù)據(jù)源
6.notify

就這樣就實(shí)現(xiàn)效果了嗎?
NO NO NO 你會發(fā)現(xiàn)頂部的材料信息模塊,變成了GridView 的一個Item ,顯示在了第一個位置
就時候,我們就使用到另一種方法了,recylerview的混排
使用方法如下:

GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 2);
    gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            return position == 0 ? 2 : 1; //第一個位置,占用2個寬度
        }
    });

首先定義整個recylerview的布局為網(wǎng)格布局和每行的網(wǎng)格數(shù)量2,然后setSpanSizeLookup ,設(shè)置第一個Item 占用2個位置即可

就這樣就實(shí)現(xiàn)了嗎?我們仔細(xì)看下面的item 之前的間距怎么控制呢?在xml 控制?可以,但是我們也可以在代碼里面來控制

public class RecyclerViewSpacesItemDecoration extends RecyclerView.ItemDecoration {
private HashMap<String, Integer> mSpaceValueMap;

public static final String TOP_DECORATION = "top_decoration";
public static final String BOTTOM_DECORATION = "bottom_decoration";
public static final String LEFT_DECORATION = "left_decoration";
public static final String RIGHT_DECORATION = "right_decoration";

public RecyclerViewSpacesItemDecoration(HashMap<String, Integer> mSpaceValueMap) {
    this.mSpaceValueMap = mSpaceValueMap;
}

@Override
public void getItemOffsets(Rect outRect, View view,
                           RecyclerView parent, RecyclerView.State state) {
    if (mSpaceValueMap.get(TOP_DECORATION) != null)
        outRect.top = mSpaceValueMap.get(TOP_DECORATION);
    if (mSpaceValueMap.get(LEFT_DECORATION) != null)
        outRect.left = mSpaceValueMap.get(LEFT_DECORATION);
    if (mSpaceValueMap.get(RIGHT_DECORATION) != null)
        outRect.right = mSpaceValueMap.get(RIGHT_DECORATION);
    if (mSpaceValueMap.get(BOTTOM_DECORATION) != null)
        outRect.bottom = mSpaceValueMap.get(BOTTOM_DECORATION);

}}

    HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();
    stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, Utils.dip2px(getActivity(), 20));//top間距
    stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, Utils.dip2px(getActivity(), 20));//底部間距
    stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, Utils.dip2px(getActivity(), 20));//左間距
    stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, Utils.dip2px(getActivity(), 20));//右間距
    mRvCook.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));

直接調(diào)用recylerview的addItemDecoration方法即可添加邊距信息,這里我們編寫一個類 RecyclerViewSpacesItemDecoration 繼承 recylerview的 RecyclerView.ItemDecoration ,重寫 getItemOffsets 方法,在里面配置相關(guān)的上下左右邊距信息即可

就這樣就可以實(shí)現(xiàn)一個recylerview 實(shí)現(xiàn)以上的功能啦.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市溉浙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枚钓,老刑警劉巖睡蟋,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件署咽,死亡現(xiàn)場離奇詭異哪痰,居然都是意外死亡自点,警方通過查閱死者的電腦和手機(jī)沪袭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來樟氢,“玉大人冈绊,你說我怎么就攤上這事〔嚎校” “怎么了死宣?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碴开。 經(jīng)常有香客問我毅该,道長,這世上最難降的妖魔是什么潦牛? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任眶掌,我火速辦了婚禮,結(jié)果婚禮上巴碗,老公的妹妹穿的比我還像新娘朴爬。我一直安慰自己,他們只是感情好橡淆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布召噩。 她就那樣靜靜地躺著,像睡著了一般逸爵。 火紅的嫁衣襯著肌膚如雪具滴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天师倔,我揣著相機(jī)與錄音构韵,去河邊找鬼。 笑死趋艘,一個胖子當(dāng)著我的面吹牛疲恢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播致稀,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冈闭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抖单?” 一聲冷哼從身側(cè)響起萎攒,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎矛绘,沒想到半個月后耍休,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡货矮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年羊精,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囚玫。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡喧锦,死狀恐怖读规,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情燃少,我是刑警寧澤束亏,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站阵具,受9級特大地震影響碍遍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜阳液,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一怕敬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧帘皿,春花似錦东跪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奉狈,卻和暖如春卤唉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仁期。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工桑驱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人跛蛋。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓熬的,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赊级。 傳聞我的和親對象是個殘疾皇子押框,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,117評論 25 707
  • 第一件事: 公號更文; 第二件事: 走路1W步理逊; 第三件事: 陪大侄兒寫作業(yè)橡伞,好無奈啊,寫了兩點(diǎn)兒了還沒寫完…… ...
    若蘭素兮閱讀 126評論 2 4
  • 5商精進(jìn)部落訓(xùn)練已經(jīng)開始一周了晋被,本周打卡共29人參加兑徘,全勤打卡共20人(截止到10.29中午12點(diǎn)),一共進(jìn)行了9...
    林木Join閱讀 378評論 0 2
  • 立春賦 應(yīng)時天暖又回春羡洛,大地陽和始換陳挂脑。 塞北未見冰雪化,江南已現(xiàn)竹梅新。 寒山籟寂孕蔥綠...
    hai自強(qiáng)閱讀 547評論 0 1
  • 雨在淅淅瀝瀝的下,雨珠落在雨傘上反射出勞累多天的臉镀脂,來來往往的行人好像都沒有注意一個普通得不能普通的人了牺蹄,失業(yè)了...
    十面春風(fēng)別不如你閱讀 292評論 0 0