RecyclerView簡單使用總結

RecyclerView 是Android L版本中新添加的一個用來取代ListView的SDK识樱,它的靈活性與可替代性比listview更好。接下來學習如何使用RecyclerView,徹底拋棄ListView.

** 介紹 **
RecyclerView與ListView原理是類似的:都是僅僅維護少量的View并且可以展示大量的數據集愉择。RecyclerView用以下兩種方式簡化了數據的展示和處理:

  • 使用LayoutManager來確定每一個item的排列方式簸州。
  • 為增加和刪除項目提供默認的動畫效果枯夜。
  • Adapter:使用RecyclerView之前价捧,你需要一個繼承自RecyclerView.Adapter的適配器,作用是將數據與每一個item的界面進行綁定。
  • LayoutManager:用來確定每一個item如何進行排列擺放遗增,何時展示和隱藏】钋啵回收或重用一個View的時候做修,* * * LayoutManager會向適配器請求新的數據來替換舊的數據,這種機制避免了創(chuàng)建過多的View和頻繁的調用*findViewById方法(與ListView原理類似)抡草。

目前SDK中提供了三種自帶的LayoutManager:

  • LinearLayoutManager
  • GridLayoutManager
  • StaggeredGridLayoutManager

** RecyclerView簡單使用方法 **
** 1.添加依賴 **
在AS的build.gradle中添加依賴饰及,然后同步一下就可以引入依賴包:

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

** 2、編寫代碼 **
添加完依賴之后康震,就開始寫代碼了燎含,與ListView用法類似,也是先在xml布局文件中創(chuàng)建一個RecyclerView的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android(http://schemas.android.com/apk/res/android)" 
xmlns:tools="[http://schemas.android.com/tools](http://schemas.android.com/tools)"   
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
  
<android.support.v7.widget.RecyclerView

        android:id="@+id/my_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"/>

</RelativeLayout>
  • 創(chuàng)建完布局之后在MainActivity中獲取這個RecyclerView腿短,并聲明LayoutManager與Adapter
mRecyclerView = (RecyclerView)findViewById(R.id.my_recycler_view);

//創(chuàng)建默認的線性LayoutManager

mLayoutManager = new LinearLayoutManager(this);

mRecyclerView.setLayoutManager(mLayoutManager);

//如果可以確定每個item的高度是固定的屏箍,設置這個選項可以提高性能

mRecyclerView.setHasFixedSize(true);

//創(chuàng)建并設置Adapter

mAdapter = newMyAdapter(getDummyDatas());

mRecyclerView.setAdapter(mAdapter);
  • 接下來的問題就是Adapter的創(chuàng)建:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

public String[] datas = null;  
public MyAdapter(String[] datas) {
      this.datas = datas;    
}
    
//創(chuàng)建新View,被LayoutManager所調用    
@Override    
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
      View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);        
      ViewHolder vh = new ViewHolder(view);      
      return vh;  
}
   
//將數據與界面進行綁定的操作
@Override   
public void onBindViewHolder(ViewHolder viewHolder, int position) {   
      viewHolder.mTextView.setText(datas[position]);
  
}
    
//獲取數據的數量 
@Override 
public int getItemCount() {
     
      return datas.length;
 
}
  
//自定義的ViewHolder橘忱,持有每個Item的的所有界面元素

public static class ViewHolder extends RecyclerView.ViewHolder {
      
      public TextView mTextView;
  
      public ViewHolder(View view){      
            super(view);        
            mTextView = (TextView) view.findViewById(R.id.text);       
}    
}

}

** 3赴魁、運行 **
寫完這些代碼這個例子既可以跑起來了。從例子也可以看出來钝诚,RecyclerView的用法并不比ListView復雜尚粘,反而更靈活好用,它將數據敲长、排列方式郎嫁、數據的展示方式都分割開來秉继,因此可定制型,自定義的形式也非常多泽铛,非常靈活尚辑。
** 橫向布局 **
如果想要一個橫向的List只要設置LinearLayoutManager如下就行,注意要聲明mLayoutManager的類型是LinearLayoutManager而不是父類LayoutManager:

mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);

** Grid布局 **
如果想要一個Grid布局的列表盔腔,只要聲明LayoutManager為GridLayoutManager即可:

mLayoutManager = new GridLayoutManager(context,columNum);
mRecyclerView.setLayoutManager(mLayoutManager);

注意杠茬,在Grid布局中也可以設置列表的Orientation屬性,來實現橫向和縱向的Grid布局弛随。

** 瀑布流布局 **
瀑布流就使用StaggeredGridLayoutManager吧瓢喉,具體方法與上面類似,就不做介紹啦舀透。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末栓票,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子愕够,更是在濱河造成了極大的恐慌走贪,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惑芭,死亡現場離奇詭異坠狡,居然都是意外死亡,警方通過查閱死者的電腦和手機遂跟,發(fā)現死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門逃沿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人幻锁,你說我怎么就攤上這事感挥。” “怎么了越败?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵触幼,是天一觀的道長。 經常有香客問我究飞,道長置谦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任亿傅,我火速辦了婚禮媒峡,結果婚禮上,老公的妹妹穿的比我還像新娘葵擎。我一直安慰自己谅阿,他們只是感情好,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著签餐,像睡著了一般寓涨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上氯檐,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天戒良,我揣著相機與錄音,去河邊找鬼冠摄。 笑死糯崎,一個胖子當著我的面吹牛,可吹牛的內容都是我干的河泳。 我是一名探鬼主播沃呢,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拆挥!你這毒婦竟也來了薄霜?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤竿刁,失蹤者是張志新(化名)和其女友劉穎黄锤,沒想到半個月后搪缨,有當地人在樹林里發(fā)現了一具尸體食拜,經...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年副编,在試婚紗的時候發(fā)現自己被綠了负甸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡痹届,死狀恐怖呻待,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情队腐,我是刑警寧澤蚕捉,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站柴淘,受9級特大地震影響迫淹,放射性物質發(fā)生泄漏。R本人自食惡果不足惜为严,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一敛熬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧第股,春花似錦应民、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽繁仁。三九已至,卻和暖如春辕狰,著一層夾襖步出監(jiān)牢的瞬間改备,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工蔓倍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悬钳,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓偶翅,卻偏偏與公主長得像默勾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子聚谁,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內容