【Android 基礎】RecyclerView 概述以及使用步驟

RecyclerView是什麼?

RecyclerView是一種新的視圖組,目標是爲任何基於適配器的視圖提供相似的渲染方式。它被作爲ListView和GridView控件的繼承者,在最新的support-V7版本中提供支持。
RecyclerView架構,提供了一種插拔式的體驗,高度的解耦,異常的靈活,通過設置它提供的不同LayoutManager,ItemDecoration , ItemAnimator實現令人瞠目的效果。
總之ListView和GridView能做的RecyclerView都能做,並且能實現瀑布流效果。

一般使用步驟:

1.在build.gradle配置RecyclerView的庫

compile 'com.android.support:recyclerview-v7:23.3.0'

2.在佈局文件寫定義RecyclerView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
   .
   .
   .
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

3.在代碼中
(1)實例化RecyclerView
(2)初始化數據
(3)設置適配器
(4)設置LayoutManager

.
.
private RecyclerView recyclerview;
private ArrayList<String> datas;
private MyRecyclerViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  //1 實例化RecyclerView
    recyclerview = (RecyclerView) findViewById(R.id.recyclerview);  
    initData();

      //3 設置RecyclerView的適配器
        adapter = new MyAdapter(RecyclerViewActivity.this,datas);
        recyclerview.setAdapter(adapter);
           //4.設置LayoutManager
        recyclerview.setLayoutManager(new LinearLayoutManager(RecyclerViewActivity.this, LinearLayoutManager.VERTICAL, false));
}
/**
 * 2 初始化數據
 */
private void initData() {
    datas = new ArrayList<>();
    for (int i = 0; i < 100; i++) {
        datas.add("Content" + i);
    }
}

4.自定義適配器

public class MyAdapter extends  RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    private final Context context;
    private final ArrayList<String> datas;


    public MyAdapter(Context context,ArrayList<String> datas){
        this.context = context;
        this.datas = datas;
    }
    /**
     * 相當於ListView適配器中的getView的創建holder佈局
     *
     * @param parent
     * @param viewType
     * @return
     */
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.item_hello, null);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.tv_text.setText(datas.get(position));
        holder.iv_icon.setBackgroundResource(R.mipmap.ic_launcher);

    }

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

    class MyViewHolder extends RecyclerView.ViewHolder {

        private TextView tv_text;
        private ImageView iv_icon;

        public MyViewHolder(View itemView) {
            super(itemView);
            tv_text = (TextView) itemView.findViewById(R.id.tv_text);
            iv_icon = (ImageView) itemView.findViewById(R.id.iv_icon);

        }
    }
}

5.設置Item佈局:
item_hello.xml


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#33000000"
    android:padding="2dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ffffff"
        android:gravity="center"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/iv_icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="3dp"
            android:src="@drawable/default" />

        <TextView
            android:id="@+id/tv_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:padding="3dp"
            android:text="內容"
            android:textColor="#000000"
            android:textSize="15sp" />
    </LinearLayout>
</RelativeLayout>

使用上其實和ListView差不多。

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