1. 程式人生 > >RecyclerView詳解

RecyclerView詳解

學習導航

認識RecyclerView

一、Recyclerview是個什麼東西呢?

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

二、Recyclerview什麼好處?

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

②提供了一種插拔式的體驗,高度的解耦,異常的靈活,針對一個Item的顯示RecylerView專門抽取出了相應的類,來控制Item的顯示,使其的擴充套件性非常強。例如recyclerview不侷限與下拉列表,它還支援GridView效果和瀑布流效果
>

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

三、Recyclerview怎麼用?經常用到那些程式碼?

  • 你想要控制其顯示的方式,請通過佈局管理器LayoutManager
  • 你想要控制Item間的間隔(可繪製),請通過ItemDecoration
  • 你想要控制Item增刪的動畫,請通過ItemAnimator
  • 你想要控制點選、長按事件,請自己寫
mRecyclerView = findView(R.id.id_recyclerview);
//設定佈局管理器
mRecyclerView.setLayoutManager(layout);
//設定adapter
mRecyclerView.setAdapter(adapter)
//設定Item增加、移除動畫
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//新增分割線,下面定義的是水平的線
mRecyclerView.addItemDecoration
(new DividerItemDecoration( getActivity(), DividerItemDecoration.HORIZONTAL_LIST));

四、我們用例子來說話!

例子效果圖:

這裡寫圖片描述

第一步、想使用RecyclerView,我們先引用他的依賴包

這裡寫圖片描述

第二步、在主佈局中,佈置一個recyclerview

這裡寫圖片描述

  • 具體程式碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

第三 步、在程式碼中實現邏輯

1、因為recyclerview是listview的升級版,所以他也需要一個介面卡,它繼承的是RecyclerView.Adapter ,他會提示你重寫三個子方法

這裡寫圖片描述

下面看介面卡中全部程式碼,首先介面卡程式碼

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * Created by ENZ on 2016/10/15.
 */
class ViewHoderAdaapters extends RecyclerView.Adapter {

    private Context context;
    private String[] datas;

    public ViewHoderAdaapters(MainActivity mainActivity, String[] data) {
        this.context = mainActivity;
        this.datas = data;
    }
    @Override
    //重寫onCreateViewHolder方法,返回一個自定義的ViewHolder
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ViewHoders viewHoders = new ViewHoders(LayoutInflater.from(parent.getContext()).inflate(R.layout.main_item,null));
        return viewHoders;
}

    @Override
    //填充onCreateViewHolder方法返回的holder中的控制元件
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ((ViewHoders) holder).tv.setText(datas[position]+position);
    }

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

    //自定義ViewHolder,
    /*
    * RecylerView封裝了viewholder的回收複用,也就是說RecylerView標準化了ViewHolder,編寫Adapter面向的是ViewHolder而不再是View了
    * */
    class ViewHoders extends RecyclerView.ViewHolder{
        private TextView tv;

        public ViewHoders(View itemView) {
            super(itemView);
            tv= (TextView) itemView.findViewById(R.id.textview);
        }
    }
}

MianActivity中程式碼

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

public class MainActivity extends Activity {

    private RecyclerView recy_view;
    private String[] data ={"我是熊大","我是熊大","我是熊大","我是熊大","我是熊大","我是熊大","我是熊大","我是熊大","我是熊大","我是熊大"};
    private ViewHoderAdaapters adaapters;

    //


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化
        recy_view= (RecyclerView)findViewById(R.id.recy_view);
        //設定佈局管理器,這裡可以控制,他的佈局風格。後面會有講到。
        recy_view.setLayoutManager(new LinearLayoutManager(this));

        adaapters = new ViewHoderAdaapters(MainActivity.this,data);
        recy_view.setAdapter(adaapters);

    }
}

如有哪裡梳理不對,還請海涵,因為我也是在學習中,並不是高手

相關推薦

Android RecyclerView RecyclerView的動畫實現(移除、新增、改變、移動)和自定義動畫的實現

一丶新增刪除時候的重新整理問題 先上一下效果圖吧 1.為了方便起見我們還是先新增三個按鈕分別實現新增刪除和改變 2.在Adapter中寫呼叫方法並進行重新整理 public void remove(int position){ list.re

Android RecyclerView (四) RecyclerView分割線的使用和分割線樣式

package com.lw.myrecyclerview; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphi

RecyclerView

學習導航 認識RecyclerView 一、Recyclerview是個什麼東西呢? RecylerView是support-v7包中的新元件,是一個強大的滑

RecyclerView(基本使用+解決複用+新增HEAD和FOOT+上拉載入更多+下拉重新整理)以及ExpandableListView的簡單使用

一、RecyclerView的簡單使用先看效果圖程式碼實現1.引入recyclerview包implementation 'com.android.support:design:27.1.0' 2.佈局中新增RecyclerView<?xml version="1.0"

Android ,MVP+retrofit +rxjava+glide recyclerview使用 ,條目點選 長按點選,三種管理器 ,分割線

首先是對應的依賴  implementation 'com.android.support:recyclerview-v7:26.1.0' 下面是對應的介面卡 裡面對應的 有點選的註釋 public class HomeAdaper extends RecyclerV

RecyclerView新增ContextMenu的兩種方案

RecyclerView+ContextMenu實現的技術難點主要是在RecyclerView中獲取被點選item的position,本文一共給出了兩種解決方案: 方案一: 從onCreateContextMenu(ContextMenu menu, View

RecyclerView使用(三)

在上一篇(RecyclerView使用詳解(二))文章中介紹了RecyclerView的多Item佈局實現,接下來要來講講RecyclerView的Cursor實現,相較於之前的實現,Cursor有更多的使用場景,也更加的常用,特別是配合LoaderManager和Curso

讓你明明白白的使用RecyclerView——SnapHelper

一、前言Google最新發布的support v4包更新到24.2.0,由原來的一個大包分割成多個小module。這樣做真是太貼心不過了,以後不會再因為單獨使用某一個功能而將整個v4包匯入專案中,而是我想用哪個就匯入哪個,很大程度上減小了APK的大小。com.android

自主實現RecyclerView下拉重新整理、上拉載入、Header、Footer以及swiperefreshlayout的部分講解

  年前年後的那段時間比較忙,忙的來忘了寫部落格。最近空閒了,有時間了,來看部落格發現有兩個來月沒有發文章了,對自己的沒有堅持先來幾個,部落格還是要寫的,以後會持續更新。   廢話少說,網上關於列表控

Android中回撥機制與RecyclerView的Item點選事件實現

總是看書上寫著回調回調,以為就是函式呼叫換了個名字,尤其是看了Button的點選事件實現後,覺得不就是觸發機制。 A事件發生->後臺處理邏輯->告訴前臺怎麼做->結束。 Android常見button點選事件: loginB

RecyclerView使用一代替ListView(點選事件,新增頭佈局,上拉重新整理下拉載入)

老規矩,先看效果; Recycler是android5.0版本中新新增的一個view; 使用之前必須新增依賴庫: dependencies { compile 'com.android.support:recyclerview-v7:23.0.+' } 這裡我就不

【Android】RecyclerView的好伴侶:DiffUtil

一 概述 DiffUtil是support-v7:24.2.0中的新工具類,它用來比較兩個資料集,尋找出舊資料集-》新資料集的最小變化量。 說到資料集,相信大家知道它是和誰相關的了,就是我的最愛,RecyclerView。 就我使用的這幾天來看,它

從頭開始學 RecyclerView(五) ItemDecoration

前言 RecyclerView.ItemDecoration,通過名字來看,它就是用來裝飾Item的。 在類ListView的檢視中,可能需要繪製分隔線;在類GridView的網格檢視中,可能需要繪製單元格樣式… 這些都可以由重寫RecyclerView

一個有特點的正六邊形RecyclerView---HexagonRecyclerView

背景 1.一直有那麼一個衝動,想寫一個自己的控制元件,然後開源在Github,充滿著莫名的成就感。 2.正好朋友的需求給了我靈感,然後對這個控制元件產生了自定義的衝動。 3.本身最近在學習RecyclerView和自定義View,正好可以鞏固一下知識點

RecyclerView的item拖動排序效果實現和它的ItemTouchHelper

recyclerview這個控制元件太強大了,自帶各種特效,很多高逼格效果需要我們自己簡單組合一下就呈現出來,比如拖動排序!它對拓展簡直是非常open(OCP原則),廢話不扯了,先看效果: 說明: 1.實現這個效果的核心類是:ItemTouchHelpe

RecyclerView+BGARefreshLayout實現自定義下拉重新整理、上拉載入和側滑刪除效果

前言 還有2個月就過年了,對於我們這樣在外漂泊的異鄉人來說,一家人團聚在一起,吃一頓團圓飯,那是再幸福不過的事了。我們之所以遠離家鄉來到異鄉就像異鄉人這首歌寫的一樣,只為一扇窗! 正文 上篇文章給大家講解了一下關於RecyclerView的使用,今天給

RecyclerView的分割線

RecyclerView分割線詳解 具體的原理可以參考底部留下的第一個地址 用法可以參考第二個地址 1. 新增RecyclerView分割線,繼承自RecyclerView.ItemDecoration 可實現3個方法 onDraw

RecyclerView封裝完美用法一

通過對RecyclerView的瞭解,個人認為此控制元件適用於需要listview與GridView切換的介面以及瀑布流介面。 第一篇主要是listView與Gridview切換程式碼: 一、先上RecyclerView的通用ViewHolder: package com

Android RecyclerView使用

上一篇我介紹了水平線性佈局和RecyclerView動態新增刪除資料行時的動畫效果。這一篇將講下RecyclerView的分隔圖自定義。 對於RecyclerView,它的分隔圖沒有ListView來的那麼簡單,只要設定android:divider屬

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

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