Android Studio2.2.2下RecyclerView的使用


1,概述 
RecyclerView可以完全代替ListView、GridView,整體上看RecyclerView架構,提供了一種插拔式的體驗,高度的解耦,異常的靈活,通過設置它提供的不同LayoutManager,ItemDecoration , ItemAnimator實現很多讓人驚艷的效果,而且實現效果也是非常的簡單。(隨便百度了一段話)

2,直接進入使用篇:

首先,創建好project

我們要想使用它,就要添加相應的依賴庫。右擊app

點那個加號,找到

 

3,代碼部分很簡潔,只放了一個簡單的綁定數據,后續的在學習,現在只是搞清楚這個布局如何呈現出了,然后能夠呈現一定的內容~

代碼部分有注釋,就不說什么了。

package examples.ouc.com.learnrv;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    //用來代替ListView
    private RecyclerView rv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        rv= new RecyclerView(this);
        setContentView(rv);

        rv.setLayoutManager( new LinearLayoutManager(this));

        rv.setAdapter(new RecyclerView.Adapter() {

            class ViewHolder extends RecyclerView.ViewHolder{

                private TextView tv;
                public ViewHolder(TextView itemView) {
                    super(itemView);
                    tv = itemView;
                }

                public TextView getTv() {
                    return tv;
                }
            }
            @Override
            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                return new ViewHolder(new TextView(parent.getContext()));
            }

            @Override
            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
                ViewHolder vh = (ViewHolder) holder;
                vh.getTv().setText("item "+position);
            }

            //huoqu ziduixiang shuliang
            @Override
            public int getItemCount() {
                return 10;
            }
        });
    }
}
MainActivity

4,上述書通過直接代碼創建布局,然后載入,但是大部分時間,還是通過xml布局文件控制比較方便

我們首先將上面的代碼進行一下重構,將adapter沖構成一個類,使代碼更簡潔~

這里面有很多注釋之類的,是跟着極客學院學習時候留下的,不過沒有影響,這只會影響我們的布局情況,並不會影響實現功能!

 1 package examples.ouc.com.learnrecylerview;
 2 
 3 
 4 import android.os.Bundle;
 5 import android.support.v7.app.AppCompatActivity;
 6 import android.support.v7.widget.GridLayoutManager;
 7 import android.support.v7.widget.LinearLayoutManager;
 8 import android.support.v7.widget.RecyclerView;
 9 
10 public class MainActivity extends AppCompatActivity {
11 
12     private RecyclerView rv;
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17 
18         rv = new RecyclerView(this);
19         setContentView(rv);
20 
21         //設置布局
22         //第一個參數獲取布局,第二個參數表示數值還是水平,第三個是否反轉
23 //        rv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false));
24 
25         //第一個參數獲取布局,第二個表示有幾列(默認是垂直方向)
26         rv.setLayoutManager(new GridLayoutManager(this,3));
27 
28         //rv.setLayoutManager(new GridLayoutManager(this,3,LinearLayoutManager.HORIZONTAL,false));
29         //添加內容
30         rv.setAdapter(new MyAdapter());
31     }
32 
33 }
MainActivity

然后是MyAdapter

 1 package examples.ouc.com.learnrecylerview;
 2 
 3 import android.support.v7.widget.RecyclerView;
 4 import android.view.LayoutInflater;
 5 import android.view.View;
 6 import android.view.ViewGroup;
 7 import android.widget.TextView;
 8 
 9 import org.w3c.dom.Text;
10 
11 /**
12  * Created by Huskyboy on 2016/11/19.
13  */
14 class MyAdapter extends RecyclerView.Adapter {
15 
16     class ViewHolder extends RecyclerView.ViewHolder {
17         //綁定子對象的視圖
18         private View root;
19         private TextView tvTitle,tvContent;
20 
21         public ViewHolder(View root) {
22             super(root);
23             tvTitle = (TextView) root.findViewById(R.id.tvTitle);
24             tvContent = (TextView) root.findViewById(R.id.tvContent);
25         }
26 
27         public TextView getTvContent() {
28             return tvContent;
29         }
30 
31         public TextView getTvTitle() {
32             return tvTitle;
33         }
34     }
35 
36     //創建holder
37     @Override
38     public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
39         //布局解析器
40         return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_cell,null));
41     }
42 
43     //對holder的textView進行操作
44     @Override
45     //第一個參數是我們綁定的holder
46     //第二個是一個索引,我們的當前初始化的數據是哪一條
47     public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
48 
49         //注意這里引入的ViewHolder類是我們上面創建的類,不要加錯包
50         ViewHolder vh = (ViewHolder) holder;
51 
52         CellData cd = data[position];
53         vh.getTvTitle().setText(cd.title);
54         vh.getTvContent().setText(cd.content);
55 
56     }
57 
58     //獲取RecylerView子對象數量
59     @Override
60     public int getItemCount() {
61         return data.length;
62     }
63 
64     private CellData[] data =  new CellData[]{new CellData("iCyhuSky"," 1995-06-19"),
65         new CellData("news ", "Nice")};
66 }
MyAdapter.java

CellData.java

 1 package examples.ouc.com.learnrecylerview;
 2 
 3 /**
 4  * Created by Huskyboy on 2016/11/19.
 5  */
 6 
 7 public class CellData {
 8     public CellData(String title, String content){
 9         this.content = content;
10         this.title = title;
11     }
12 
13     public String title = "title";
14     public String content = "content";
15 }
CellData.java

布局文件

<?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="match_parent">

    <TextView
        android:text="tvTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tvTitle" />

    <TextView
        android:text="tvComtent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tvContent" />
</LinearLayout>
list_cell.xml

 5,這里注意一點是,在重寫MyAdapter的時候,

 public int getItemCount() {
        return data.length;
    }

這個返回的數量一定要與Data數組相對應,否則會報錯,無法加載布局!

 

 

最后附上CSDN上面一些大神的講解

http://so.csdn.net/so/search/s.do?ref=toolbar&q=RecyclerView&ref=toolbar&q=RecyclerView


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM