RecyclerView基本使用

博客地址

背景

以前在展示列表時一直都是在使用ListView。

唯一的區(qū)別大概就是適配器Adapter的不同而已剂习。

但是后來接觸到了RecyclerView之后,就喜歡上了RecyclerView。

因此本篇打算說下RecyclerView的基本使用业栅,給大家參考下冈欢。

正所謂“學以致用”歉铝,驗明是否掌握了一門東西的最好方法是能夠把這個東西講給別人聽,別人還能聽懂凑耻。

所以基于此太示,本篇文章應(yīng)運而生。

RecyclerView的好處

這里我就截取官網(wǎng)上的兩段文字來說明香浩。

Many apps need to display user-interface elements based on large data sets, or data that frequently changes. For example, a music app might need to display information about thousands of albums, but only a dozen of those albums might be on-screen at a time. If the app created UI widgets for each of those albums, the app would end up using a lot of memory and storage, potentially making the app slow and crash-prone. On the other hand, if the app created UI widgets each time a new album scrolled onto the screen and destroyed the widgets when it scrolled off, that would also cause the app to run slowly, since creating UI objects is a resource-intensive operation.

To address this common situation, the Android Support Library provides the RecyclerView suite of objects. RecyclerView and its associated classes and interfaces help you to design and implement a dynamic user interface that runs efficiently. You can use these classes as they are, or customize them to suit your specific needs.

傳送門

A flexible view for providing a limited window into a large data set.

傳送門

簡單的說RecyclerView在顯示大量數(shù)據(jù)的時候能起到高效的作用类缤。

實戰(zhàn)

前面鋪墊了那么多,接下來我們就實際看看一個最簡單的RecyclerView如何撰寫吧邻吭?

首先說明下RecyclerView的幾大組成部分:

  • RecyclerView本身
  • 適配器Adapter(下面的例子為MainAdapter)
  • ViewHolder(下面的例子為MainViewHolder)
  • Item布局(下面的例子為item_main.xml)

這四個組成部分依賴關(guān)系是Item->ViewHolder->Adapter->RecyclerView

好了餐弱,接下來就讓我們一步一步來實現(xiàn)一個展示文本的列表。

  1. 添加gradle依賴囱晴。在要使用的module的build.gradle文件中加入依賴
compile 'com.android.support:recyclerview-v7:26.+'
  1. 確定列表布局item_main.xml膏蚓。這里列表展示的就是一個文本,所以只需要一個TextView即可畸写。
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/txt_title"
    android:layout_width="match_parent"
    android:layout_height="@dimen/dp_50"
    android:gravity="center"
    >
</TextView>
  1. 創(chuàng)建列表布局的ViewHolder驮瞧,繼承自RecyclerView.ViewHolder,并初始化列表中的控件枯芬。
public class MainViewHolder extends RecyclerView.ViewHolder {

    @BindView(R.id.txt_title)
    TextView mTxtTitle;

    public MainViewHolder(View itemView) {
        super(itemView);
        ButterKnife.bind(this, itemView);
    }

}

這里使用了butterknife對TextView進行初始化论笔。

  1. 創(chuàng)建適配器Adapter,繼承自RecyclerView.Adapter<MainViewHolder> 破停。將數(shù)據(jù)源和布局文件通過Adapter聯(lián)系起來翅楼。
public class MainAdapter extends RecyclerView.Adapter<MainViewHolder> {

    private Activity activity;
    private List<String> itemList;

    public MainAdapter(Activity activity, List<String> itemList) {
        if (activity == null || itemList == null) {
            throw new IllegalArgumentException("params can't be null");
        }
        this.activity = activity;
        this.itemList = itemList;
    }

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

    @Override
    public void onBindViewHolder(MainViewHolder holder, int position) {
        holder.mTxtTitle.setText(itemList.get(position));
    }

    @Override
    public int getItemCount() {
        return itemList.size();
    }
}

這里說明下幾個方法:

  • 構(gòu)造函數(shù)。用于對數(shù)據(jù)源進行初始化真慢,以及傳遞activity進來毅臊。
  • onCreateViewHolder。使用item布局來初始化MainViewHolder黑界。
  • onBindViewHolder管嬉。通過MainViewHolder獲取到具體控件執(zhí)行對應(yīng)邏輯。
  • getItemCount朗鸠。返回數(shù)據(jù)源的大小蚯撩。
  1. 創(chuàng)建RecyclerView并進行初始化。

在使用RecyclerView的布局文件中加入下面代碼:

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

初始化RecyclerView并將其與適配器綁定烛占。

由于這里使用了butterknife胎挎,所以創(chuàng)建的時候就初始化了沟启。

@BindView(R.id.recycler_view)
RecyclerView mRecyclerView;
private void initRecyclerView() {
        //設(shè)置子視圖
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        //添加分割線
        mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
        //設(shè)置適配器
        mAdapter = new MainAdapter(this, mItemList);
        mRecyclerView.setAdapter(mAdapter);
    }

如此,一個簡單的RecycleView就完成了犹菇。


心動不如行動德迹,趕緊自己去敲下代碼熟悉下唄~
代碼傳送門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市揭芍,隨后出現(xiàn)的幾起案子胳搞,更是在濱河造成了極大的恐慌,老刑警劉巖称杨,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肌毅,死亡現(xiàn)場離奇詭異,居然都是意外死亡姑原,警方通過查閱死者的電腦和手機悬而,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來页衙,“玉大人摊滔,你說我怎么就攤上這事〉昀郑” “怎么了艰躺?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長眨八。 經(jīng)常有香客問我腺兴,道長,這世上最難降的妖魔是什么廉侧? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任页响,我火速辦了婚禮,結(jié)果婚禮上段誊,老公的妹妹穿的比我還像新娘闰蚕。我一直安慰自己,他們只是感情好连舍,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布没陡。 她就那樣靜靜地躺著,像睡著了一般索赏。 火紅的嫁衣襯著肌膚如雪盼玄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天潜腻,我揣著相機與錄音埃儿,去河邊找鬼。 笑死融涣,一個胖子當著我的面吹牛童番,可吹牛的內(nèi)容都是我干的精钮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼剃斧,長吁一口氣:“原來是場噩夢啊……” “哼杂拨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悯衬,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎檀夹,沒想到半個月后筋粗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡炸渡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年娜亿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚌堵。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡买决,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吼畏,到底是詐尸還是另有隱情督赤,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布泻蚊,位于F島的核電站躲舌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏性雄。R本人自食惡果不足惜没卸,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秒旋。 院中可真熱鬧约计,春花似錦、人聲如沸迁筛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瑰煎。三九已至铺然,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酒甸,已是汗流浹背魄健。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留插勤,地道東北人沽瘦。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓革骨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親析恋。 傳聞我的和親對象是個殘疾皇子良哲,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

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