RecyclerView的使用介紹(一)

介紹

RecyclerView與ListView原理是類似的:都是僅僅維護少量的View並且可以展示大量的數據集。RecyclerView用以下兩種方式簡化了數據的展示和處理:

  • 使用LayoutManager來確定每一個item的排列方式。 爲增加和刪除項目提供默認的動畫效果。
  • 你也可以定義你自己的LayoutManager和添加刪除動畫。
    Adapter:使用RecyclerView之前,你需要一個繼承自RecyclerView.Adapter的適配器,作用是將數據與每一個item的界面進行綁定。
  • LayoutManager:用來確定每一個item如何進行排列擺放,何時展示和隱藏。回收或重用一個View的時候,LayoutManager會向適配器請求新的數據來替換舊的數據,這種機制避免了創建過多的View和頻繁的調用findViewById方法(與ListView原理類似)。

目前SDK中提供了三種自帶的

  • LayoutManager:
  • LinearLayoutManager
  • GridLayoutManager

    第一節、簡單的RecyclerView使用方法
    1、xml佈局(原生的v7包下的)

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

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

2、Activity中獲取這個RecyclerView,並聲明LayoutManager與Adapter,代碼如下:

 LinearLayoutManager layoutManager = new GridLayoutManager(this, 4);
        //設置佈局管理器
        myRecycleView.setLayoutManager(layoutManager);
        //設置水平或者垂直佈局
        layoutManager.setOrientation(OrientationHelper.VERTICAL);
        //設置適配器
        MyAdapter myAdapter = new MyAdapter(this, mDatas);
        myRecycleView.setAdapter(myAdapter);
        //設置條目動畫
        myRecycleView.setItemAnimator(new DefaultItemAnimator());
        //如果可以確定每個item的高度是固定的,設置這個選項可以提高性能
        mRecyclerView.setHasFixedSize(true);

3、接下來的問題就是Adapter的創建:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private Context context;
    private List<String> mDatas;

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

//創建新View,被LayoutManager所調用
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_num, parent,false);
        MyViewHolder viewHolder = new MyViewHolder(view);
        return viewHolder;
    }

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


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


    class MyViewHolder extends RecyclerView.ViewHolder {

        TextView content;

        public MyViewHolder(View itemView) {
            super(itemView);
            content = (TextView) itemView.findViewById(R.id.tv_cs);
        }
    }

}

橫向佈局

如果想要一個橫向的List只要設置LinearLayoutManager如下就行,注意要聲明mLayoutManager的類型是LinearLayoutManager而不是父類LayoutManager:

mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);

Grid佈局

如果想要一個Grid佈局的列表,只要聲明LayoutManager爲GridLayoutManager即可:

mLayoutManager = new GridLayoutManager(context,columNum);
mRecyclerView.setLayoutManager(mLayoutManager);

注意,在Grid佈局中也可以設置列表的Orientation屬性,來實現橫向和縱向的Grid佈局。

瀑布流佈局

瀑布流就使用StaggeredGridLayoutManager即可:

recyclerView.setLayoutManager(newStaggeredGridLayoutManager(columNum, StaggeredGridLayoutManager.VERTICAL));
發佈了43 篇原創文章 · 獲贊 9 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章