Android RecyclerView 詳解(一)最最最基本使用

Android RecyclerView 詳解(一)基本使用



一、首先是RecyclerView能做什麼,又有什麼優點呢?
	RecyclerView是Android 5.0 materials design中的組件之一,相應的還有CardView、Palette等。看名字我們就能看出一點端倪,沒錯,它主要的特點就是複用。我們知道,Listview中的Adapter中可以實現ViewHolder的複用。RecyclerView提供了一個耦合度更低的方式來複用ViewHolder,並且可以輕鬆的實現ListView、GridView以及瀑布流的效果。
二、基本使用
1.導包





2.在佈局文件中使用
最好聲明好寬和高要不會比較消耗內存
    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
然後你有兩個選擇
(1)在佈局中聲明LayoutManager
(2)在代碼中聲明,如果你只是想要一個簡單的RecyclerView的話那麼在佈局中即可,但是如果你想對其進行操作最好還是寫在代碼中。

3.新建一個條目佈局
注意!!!!:寬高的指定上他的父佈局需要wrap_content如果是match_content的話那麼會佔滿整個界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/item_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

4.創建一個Adapter

(1)創建一個內部類來集成RecyclerView.ViewHolder

    public static class MyViewHolder extends RecyclerView.ViewHolder {
        public MyViewHolder(View itemView) {
            super(itemView);
        }
    }
(2)這個Adapter繼承的不是BaseAdapter而是RecyclerView.Adapter

其中泛型需要綁定一個ViewHolder類型的泛型,可以是你自己創建的內部類(並在這裏綁定你的控件)
    public static class MyViewHolder extends RecyclerView.ViewHolder {
        TextView textView;
        public MyViewHolder(View itemView) {
            super(itemView);
            textView = (TextView) itemView.findViewById(R.id.item_text);
        }
    }


(3)這個時候會報錯,那麼對方法進行實現即可,會有三個方法需要實現

a.返回數據條目數
    @Override
    public int getItemCount() {
        return 0;
    }
b.相當於ListView中contentView爲空時創建一樣
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }
c.無論是新創建的或者是原有的需要將數據綁定
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {

    }
(4)跟listView差不多的是你可以將數據和context利用構造方法傳入Adapter中
    private List<String> list;
    private Context context;

    public MyAdapter(List<String> list, Context context) {
        this.list = list;
        this.context = context;
    }

(5)實現你的抽象方法
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.textView.setText(list.get(position));
    }

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


5.創建數據源和綁定Adapter
package com.lw.myrecyclerview;

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

import java.util.ArrayList;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {

    private RecyclerView myRecyclerVIew;
    private ArrayList<String> list;
    private MyAdapter myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
        myAdapter = new MyAdapter(list, this);
        myRecyclerVIew.setAdapter(myAdapter);
        myRecyclerVIew.setLayoutManager(new LinearLayoutManager(this));
    }

    private void initView() {
        myRecyclerVIew = ((RecyclerView) findViewById(R.id.myRecyclerView));
    }

    private void initData() {
        list = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            list.add(String.format(Locale.CHINA,"第%03d條數據",i));
        }
    }
}

其中setLayoutManager(new LinearLayoutManager(this)),將在下篇文章中進行詳細說明

以上一個最爲基本的RecyclerView就完成了,實現的是一個ListView的效果,但是跟listVIew還有一些區別,就是他沒有分割線,而且你會發現他沒有什麼setOnItemClickListener,那麼他的點擊事件如何實現呢,都會在下篇文章中統一說明。源碼會在最後一篇文章給出。

源碼:源碼鏈接

發佈了33 篇原創文章 · 獲贊 14 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章