RecyclerView系列一:簡(jiǎn)單使用

前言

一個(gè)不小心3個(gè)月沒有寫博客了吩跋,復(fù)習(xí)一下RecyclerView的使用吼鱼。
RecyclerView出現(xiàn)了這么多年了淳玩,每一次使用都要考慮怎樣用陵珍。這真的不能容忍了。

任務(wù)

自己動(dòng)手實(shí)戰(zhàn)一把型豁,注意下面的某些句子是摘抄的僵蛛。。迎变。

介紹

RecyclerView是support-v7包中的新組件充尉,是一個(gè)強(qiáng)大的滑動(dòng)組件,與經(jīng)典的ListView相比衣形,同樣擁有item回收復(fù)用的功能驼侠,這一點(diǎn)從它的名字Recyclerview即回收view也可以看出。
優(yōu)點(diǎn):

  • RecyclerView封裝了viewholder的回收復(fù)用谆吴,也就是說RecyclerView標(biāo)準(zhǔn)化了ViewHolder倒源,編寫Adapter面向的是ViewHolder而不再是View了,復(fù)用的邏輯被封裝了句狼,寫起來更加簡(jiǎn)單笋熬。
  • 提供了一種插拔式的體驗(yàn),高度的解耦腻菇,異常的靈活胳螟,針對(duì)一個(gè)Item的顯示RecyclerView專門抽取出了相應(yīng)的類,來控制Item的顯示筹吐,使其的擴(kuò)展性非常強(qiáng)旺隙。
  • 可以控制Item增刪的動(dòng)畫,可以通過ItemAnimator這個(gè)類進(jìn)行控制骏令,當(dāng)然針對(duì)增刪的動(dòng)畫蔬捷,RecyclerView有其自己默認(rèn)的實(shí)現(xiàn)。
  • Adapter:使用RecyclerView之前榔袋,你需要一個(gè)繼承自RecyclerView.Adapter的適配器周拐,作用是將數(shù)據(jù)與每一個(gè)item的界面進(jìn)行綁定。
  • LayoutManager:用來確定每一個(gè)item如何進(jìn)行排列擺放凰兑,何時(shí)展示和隱藏妥粟。回收或重用一個(gè)View的時(shí)候吏够,LayoutManager會(huì)向適配器請(qǐng)求新的數(shù)據(jù)來替換舊的數(shù)據(jù)勾给,這種機(jī)制避免了創(chuàng)建過多的View和頻繁的調(diào)用findViewById方法(與ListView原理類似)滩报。

簡(jiǎn)單的RecyclerView使用方法

1.添加依賴

在AS的build.gradle中添加依賴,然后同步一下就可以引入依賴包:

dependencies {
    ...
    compile 'com.android.support:recyclerview-v7:26.+'
}

2.布局文件

添加完依賴之后播急,就開始寫代碼了脓钾,與ListView用法類似,也是先在xml布局文件中創(chuàng)建一個(gè)RecyclerView的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".baseUse.RecyclerActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </android.support.v7.widget.RecyclerView>

</RelativeLayout>

2.創(chuàng)建完布局之后在MainActivity中獲取這個(gè)RecyclerView桩警,并聲明LayoutManager與Adapter可训,代碼如下:

        mRecyclerView = findViewById(R.id.recycler_view);
        //創(chuàng)建默認(rèn)的線性LayoutManager
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(linearLayoutManager);
        //創(chuàng)建并設(shè)置Adapter
        mRecyclerView.setAdapter(new MyAdapter(myDatas));

3.Adapter的創(chuàng)建問題,是要繼承RecyclerView.Adapter這個(gè)類的捶枢。代碼如下:


    public class MyAdapter extends RecyclerView.Adapter {
        public String[] datas = null;

        public MyAdapter(String[] datas) {
            this.datas = datas;
        }

        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler, parent, false);
            ViewHolder vh = new ViewHolder(view);
            return vh;
        }

        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            if (holder instanceof ViewHolder) {
                ((ViewHolder) holder).mTextView.setText(datas[position]);
            }
        }

        @Override
        public int getItemCount() {
            return datas.length;
        }


        //自定義的ViewHolder握截,持有每個(gè)Item的的所有界面元素
        class ViewHolder extends RecyclerView.ViewHolder {
            public TextView mTextView;

            public ViewHolder(View view) {
                super(view);
                mTextView = view.findViewById(R.id.tv_recycler);
            }
        }

    }

主要的就是3個(gè)方法:
a) onCreateViewHolder()
這個(gè)方法主要生成為每個(gè)Item inflater出一個(gè)View,但是該方法返回的是一個(gè)ViewHolder烂叔。該方法把View直接封裝在ViewHolder中谨胞,然后我們面向的是ViewHolder這個(gè)實(shí)例,當(dāng)然這個(gè)ViewHolder需要我們自己去編寫蒜鸡。直接省去了當(dāng)初的convertView.setTag(holder)和convertView.getTag()這些繁瑣的步驟胯努。

b) onBindViewHolder()
這個(gè)方法主要用于適配渲染數(shù)據(jù)到View中。方法提供給你了一viewHolder而不是原來的convertView术瓮。

c) getItemCount()
這個(gè)方法就類似于BaseAdapter的getCount方法了,即總共有多少個(gè)條目贰健。

4.運(yùn)行

寫完這些代碼這個(gè)例子既可以跑起來了

總結(jié)

本節(jié)介紹的是一個(gè)最最簡(jiǎn)單的RecyclerView的使用方法胞四,后面將介紹一些更高級(jí)的用法。小伙伴們都會(huì)用了吧伶椿!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辜伟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子脊另,更是在濱河造成了極大的恐慌导狡,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偎痛,死亡現(xiàn)場(chǎng)離奇詭異旱捧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)踩麦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門枚赡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谓谦,你說我怎么就攤上這事贫橙。” “怎么了反粥?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵卢肃,是天一觀的道長(zhǎng)疲迂。 經(jīng)常有香客問我,道長(zhǎng)莫湘,這世上最難降的妖魔是什么尤蒿? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮逊脯,結(jié)果婚禮上优质,老公的妹妹穿的比我還像新娘。我一直安慰自己军洼,他們只是感情好巩螃,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匕争,像睡著了一般避乏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甘桑,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天拍皮,我揣著相機(jī)與錄音,去河邊找鬼跑杭。 笑死铆帽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的德谅。 我是一名探鬼主播爹橱,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼窄做!你這毒婦竟也來了愧驱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤椭盏,失蹤者是張志新(化名)和其女友劉穎组砚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掏颊,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡糟红,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乌叶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片改化。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖枉昏,靈堂內(nèi)的尸體忽然破棺而出陈肛,到底是詐尸還是另有隱情,我是刑警寧澤兄裂,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布句旱,位于F島的核電站阳藻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谈撒。R本人自食惡果不足惜腥泥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望啃匿。 院中可真熱鬧蛔外,春花似錦、人聲如沸溯乒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裆悄。三九已至矛纹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間光稼,已是汗流浹背或南。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艾君,地道東北人采够。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像冰垄,于是被迫代替她去往敵國(guó)和親蹬癌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345