1. 程式人生 > >Android開發之RecyclerView的使用全解

Android開發之RecyclerView的使用全解

轉自

http://blog.csdn.net/dmk877/article/details/50816933

之後,谷歌公司推出了RecylerView控制元件,RecylerView,我想看到一個新名詞後大部分人會首先發出一個疑問,recylerview是什麼?為什麼會有recylerview也就是說recylerview的優點是什麼?recylerview怎麼用?接下來就對這幾個問題來一起討論一下recylerview,如有謬誤歡迎批評指正,如有疑問請留言。

通過本篇部落格,你將學到以下知識點

①RecyclerView與ListView相比它的優點

②RecyclerView的初步用法

③RecyclerView增加分隔線

④RecyclerView更改分隔線的樣式

⑤RecyclerView的Adapter的用法

⑥RecyclerView.Adapter中重新整理的幾個方法的對比

⑦給RecyclerView增加條目點選事件

1.RecyclerView是什麼?

      RecylerView是support-v7包中的新元件,是一個強大的滑動元件,與經典的ListView相比,同樣擁有item回收複用的功能,這一點從它的名字recylerview即回收view也可以看出。看到這也許有人會問,不是已經有ListView了嗎,為什麼還要RecylerView呢?這就牽扯到第二個問題了。


2.RecyclerView的優點是什麼?

     根據官方的介紹RecylerView是ListView的升級版,既然如此那RecylerView必然有它的優點,現就RecylerView相對於ListView的優點羅列如下:

①RecylerView封裝了viewholder的回收複用,也就是說RecylerView標準化了ViewHolder,編寫Adapter面向的是ViewHolder而不再是View了,複用的   邏輯被封裝了,寫起來更加簡單。

②提供了一種插拔式的體驗,高度的解耦,異常的靈活,針對一個Item的顯示RecylerView專門抽取出了相應的類,來控制Item的顯示,使其的擴充套件性非常強。例如:

你想控制橫向或者縱向滑動列表效果可以通過LinearLayoutManager這個類來進行控制(與GridView效果對應的是GridLayoutManager,與瀑布流對應的還有StaggeredGridLayoutManager等),也就是說RecylerView不再拘泥於ListView的線性展示方式,它也可以實現GridView的效果等多種效果。你想控制Item的分隔線,可以通過繼承RecylerView的ItemDecoration這個類,然後針對自己的業務需求去抒寫程式碼。

③可以控制Item增刪的動畫,可以通過ItemAnimator這個類進行控制,當然針對增刪的動畫,RecylerView有其自己預設的實現。

3.RecyclerView的用法

3.1 RecyclerView的初步用法(包括RecyclerView.Adapter用法)

說了這麼多,可能大家最關心的就是RecylerView應該怎麼用,我們先來討論討論RecylerView的用法的理論知識,然後結合一個例項來體驗一下RecylerView的優勢首先我們需要明白的一點是使用RecylerView必須匯入support-v7包,在上面我提到過RecylerView高度的解耦,異常的靈活谷歌給我們提供了多個類來控制Item的顯示。

  1. recyclerView = (RecyclerView) findViewById(R.id.recyclerView);  
  2. LinearLayoutManager layoutManager = new LinearLayoutManager(this );  
  3. //設定佈局管理器
  4. recyclerView.setLayoutManager(layoutManager);  
  5. //設定為垂直佈局,這也是預設的
  6. layoutManager.setOrientation(OrientationHelper. VERTICAL);  
  7. //設定Adapter
  8. recyclerView.setAdapter( recycleAdapter);  
  9.  //設定分隔線
  10. recyclerView.addItemDecoration( new DividerGridItemDecoration(this ));  
  11. //設定增加或刪除條目的動畫
  12. recyclerView.setItemAnimator( new DefaultItemAnimator());  
可以看到對RecylerView的設定過程,比ListView要複雜一些,這也是RecylerView高度解耦的表現,雖然程式碼抒寫上有點複雜,但它的擴充套件性是極高的。 在瞭解了RecyclerView的一些控制之後,緊接著來看看它的Adapter的寫法,RecyclerView的Adapter與ListView的Adapter還是有點區別的,RecyclerView.Adapter,需要實現3個方法: ①onCreateViewHolder()     這個方法主要生成為每個Item inflater出一個View,但是該方法返回的是一個ViewHolder。該方法把View直接封裝在ViewHolder中,然後我們面向的是ViewHolder這個例項,當然這個ViewHolder需要我們自己去編寫。直接省去了當初的convertView.setTag(holder)和convertView.getTag()這些繁瑣的步驟。 ②onBindViewHolder()      這個方法主要用於適配渲染資料到View中。方法提供給你了一個viewHolder,而不是原來的convertView。 ③getItemCount()       這個方法就類似於BaseAdapter的getCount方法了,即總共有多少個條目。 例項:接著來幾個小的例項幫助大家更深入的瞭解RecyclerView的用法,首先來實現一個最簡單的列表,效果如下

這種效果的MainAcitivity的程式碼如下

  1. package com.example.reclerviewpractice;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. import com.example.reclerviewpractice.adapter.MyRecyclerAdapter;  
  5. import android.annotation.SuppressLint;  
  6. import android.os.Bundle;  
  7. import android.support.v7.app.ActionBarActivity;  
  8. import android.support.v7.widget.DefaultItemAnimator;  
  9. import android.support.v7.widget.LinearLayoutManager;  
  10. import android.support.v7.widget.OrientationHelper;  
  11. import android.support.v7.widget.RecyclerView;  
  12. publicclass MainActivity extends ActionBarActivity {  
  13.      private RecyclerView recyclerView;  
  14.      private List<String> mDatas;  
  15.      private MyRecyclerAdapter recycleAdapter;  
  16.      @SuppressLint("NewApi"@Override
  17.      protectedvoid onCreate(Bundle savedInstanceState) {  
  18.             super.onCreate(savedInstanceState);  
  19.            setContentView(R.layout. activity_main);  
  20.             recyclerView = (RecyclerView) findViewById(R.id.recyclerView );  
  21.            initData();  
  22.             recycleAdapter= new MyRecyclerAdapter(MainActivity.this , mDatas );  
  23.            LinearLayoutManager layoutManager = new LinearLayoutManager(this);  
  24.             //設定佈局管理器
  25.             recyclerView.setLayoutManager(layoutManager);  
  26.             //設定為垂直佈局,這也是預設的
  27.            layoutManager.setOrientation(OrientationHelper.VERTICAL);  
  28.             //設定Adapter
  29.             recyclerView.setAdapter( recycleAdapter);  
  30.             //設定增加或刪除條目的動畫
  31.             recyclerView.setItemAnimator(new DefaultItemAnimator());  
  32.      }  
  33.      privatevoid initData() {  
  34.             mDatas = new ArrayList<String>();  
  35.             for ( int i=0; i < 40; i++) {  
  36.                  mDatas.add( "item"+i);  
  37.            }  
  38.      }  
  39. }  
RecyclerView的Adapter的程式碼如下:
  1. package com.example.reclerviewpractice.adapter;  
  2. import java.util.List;  
  3. import com.example.reclerviewpractice.R;  
  4. import android.content.Context;  
  5. import android.support.v7.widget.RecyclerView;  
  6. import android.support.v7.widget.RecyclerView.ViewHolder;  
  7. import android.view.LayoutInflater;  
  8. import android.view.View;  
  9. import android.view.ViewGroup;  
  10. import android.widget.TextView;  
  11. publicclass MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> {  
  12.      private List<String> mDatas;  
  13.      private Context mContext;  
  14.      private LayoutInflater inflater;  
  15.      public MyRecyclerAdapter(Context context, List<String> datas){  
  16.             this. mContext=context;  
  17.             this. mDatas=datas;  
  18.             inflater=LayoutInflater. from(mContext);  
  19.      }  
  20.      @Override
  21.      publicint getItemCount() {  
  22.             return mDatas.size();  
  23.      }  
  24.      //填充onCreateViewHolder方法返回的holder中的控制元件
  25.      @Override
  26.      publicvoid onBindViewHolder(MyViewHolder holder, finalint position) {  
  27.            holder.tv.setText( mDatas.get(position));  
  28.      }  
  29.      //重寫onCreateViewHolder方法,返回一個自定義的ViewHolder
  30.      @Override
  31.      public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {  
  32.            View view = inflater.inflate(R.layout. item_home,parent, false);  
  33.            MyViewHolder holder= new MyViewHolder(view);  
  34.             return holder;  
  35.      }  
  36.      

    相關推薦

    Android開發RecyclerView的使用

    轉自 http://blog.csdn.net/dmk877/article/details/50816933 之後,谷歌公司推出了RecylerView控制元件,RecylerView,我想看到一個新名詞後大部分人會首先發出一個疑問,recylervie

    Android開發Zip下載

    本篇部落格為需求而發燒,若有雷同需求code拿走不謝。 需求如下:點選Item,從伺服器下載zip包到本地資料夾並解壓,解壓後的圖片檔案全部查詢出來,用於介面預覽 沒有強制每次都下載zip包保持最新,如果有需要FileDownload有函式支援,亦

    Android開發RecyclerView實現流式佈局

    RecyclerView是什麼? RecycleView的出現, 替代了ListView, 沒了OnitemClickListener,; LayoutManager負責計算佈局; Adapter 負責適配,還增加了ViewHolder;RecycleView

    Android開發SharedPreferences詳

    一、概述 利用SharedPreferences儲存資料是Android本地儲存資料的方式之一。SharedPreferences主要用於儲存基本型別的資料,例如int、long、string、Boo

    ANDROID開發SQLite詳

    SQLite簡介 Google為Andriod的較大的資料處理提供了SQLite,他在資料儲存、管理、維護等各方面都相當出色,功能也非常的強大。SQLite具備下列特點: 1.輕量級 使用 SQLite 只需要帶一個動態庫,就可以享受它的全部功能

    Android開發RecyclerView新增頭部和底部

    前言:我們在使用RecyclerView的過程中其實還是有很多問題的,前面提到的沒有預設的分割線,很是讓人蛋疼啊,但現在有出了個問題,不能新增頭部和底部,這一度讓我認為這貨還是沒有最愛的ListView好用啊,哈哈,既然谷歌出來了,我們就要使用,沒有頭和腳那我們就給他造出頭

    Android開發RecyclerView(一)初步使用

    首先要感謝前面的大佬們的總結,給了我站在巨人肩膀上的機會。文中有不對的地方還望大佬指出,如有大佬覺的侵權的地方還望指出,鄙人將以最快速度修改!好了,話不多少了,開始開車! 第一步:匯入RecyclerView compile 'com.android.support:re

    Android開發RecyclerView的互動動畫(實現拖拽和刪除)

    做RecyclerView做相關的動畫效果的時候,用的最多的是v7包下的ItemTouchHelper類,這個類很強大,如有興趣的童鞋可以自行翻看原始碼,接下來我帶領大家實現RecyclerView相關的互動動畫。大家看下面的效果(拖拽和刪除): ------------

    Android開發最新Recyclerview控制元件的使用詳(一)

        本篇博文主要給大家分享關於RecyclerView控制元件的使用及通過繼承RecyclerView來實現滑動時載入圖片的優化方案,也同樣能解決防止圖片亂序的問題,之前有在網上有看到大神對Android中ListView非同步載入圖片亂序問題進行過分析,並深入剖析原理

    Android開發漫漫長途 XIV——RecyclerView

    計算 來看 就是 們的 anim nullable 源碼 添加 問題 該文章是一個系列文章,是本人在Android開發的漫漫長途上的一點感想和記錄,我會盡量按照先易後難的順序進行編寫該系列。該系列引用了《Android開發藝術探索》以及《深入理解Android 卷Ⅰ,Ⅱ,Ⅲ

    Android開發漫漫長途 XVI——ListView與RecyclerView項目實戰

    列表 系列 緩存 廣泛 原理 前言 評論 request 功能點 該文章是一個系列文章,是本人在Android開發的漫漫長途上的一點感想和記錄,我會盡量按照先易後難的順序進行編寫該系列。該系列引用了《Android開發藝術探索》以及《深入理解Android 卷Ⅰ,Ⅱ,Ⅲ》中

    _030_Android_ Android開發SmsManager(簡訊管理器)詳

    轉自https://blog.csdn.net/qq_37443229/article/details/80039836,感謝作者的無私分享。 Android開發之SmsManager(簡訊管理器)詳解         SmsManager是

    Android開發基本控制元件和詳四種佈局方式

    Android中的控制元件的使用方式和iOS中控制元件的使用方式基本相同,都是事件驅動。給控制元件新增事件也有介面回撥和委託代理的方式。今天這篇部落格就總結一下Android中常用的基本控制元件以及佈局方式。說到佈局方式Android和iOS還是區別挺大的,在iOS中有F

    Android開發“ListView與RecyclerView的對比”

    在Android開發最火熱的時候ListView是最長使用的一種展示多item的控制元件,而在2018年的現在已經很少有人用ListView了,使用最多當數RecyclerView了。 下面總結一下兩者的區別: 兩者的用法區別 佈局效果 對空資料的處理 HeaderV

    android開發wheel控制元件使用詳

    出門在外生不起病呀,隨便兩盒藥60多塊錢。好吧,不廢話了,今天我們來看看wheel控制元件的使用,這是GitHub上的一個開源控制元件,用起來十分方便,我們可以用它做許多事情,比如做一個自定義的datepicker,在一些電商App中,經常用它來做省市縣三級聯動,總之用途還是

    Android開發實現水平滾動效果—RecyclerView

    ListView由於其強大的功能,在過去的Android開發中有著卓越的貢獻,然而使用ListView,如果不使用一些技巧來提升其效率的話,那麼ListView的效能會很差。 為此,Android提供了一個更加強大的滾動控制元件–RecyclerView。下面

    Android開發第三方推送JPush極光推送知識點詳 學會整合第三方SDK推送

    下面是一些知識點介紹,後期將會帶領大家進行程式碼實戰: 一、Android實現推送方式解決方案: 1、推送方式基礎知識:    在移動網際網路時代以前的手機,如果有事情發生需要通知使用者,則會有一個視窗彈出,將告訴使用者正在發生什麼事情。可能是未接電話

    Android開發WebView和JS互動詳

    Android提供了一個很強大的WebView控制元件用來處理Web網頁,而在網頁中,JavaScript又是一個很舉足輕重的指令碼。本文將介紹如何實現Java程式碼和Javascript程式碼的相互呼叫。 如何實現 實現Java和js互

    Android開發JSON資料解析詳(二)

    在上一篇我們講解了Android開發JSON的基本介紹以及JSON的資料結構等, 今天我們來講解一下JSON的工作原理以及基本用法: JSON解析分為兩種情況,一種是在伺服器端解析,另一種是在客戶端解析 第一種:在伺服器段解析:    通常,客戶端在請求伺服器資料時,伺服器

    一篇好文Android文字軟鍵盤

    已經有一個多月沒有寫文章了,當然,我沒失蹤,我還活著!因為換了新的工作環境,所以在接手專案的時候花了點時間……不為自己做過多借口,今後持續更新好內容(還是希望自己能周更)! 這篇文章最初是記錄一個全屏模式下輸入框被軟鍵盤覆蓋的問題,要求背景不動,輸入框上移!碰