Android的新特性RecycleView

RecycleView
1.RecyclerView是什麼?
RecylerView:是support-v7包中的新組件,是一個強大的滑動組件,與經典的ListView相比,同樣擁
有 item回收複用的功能,這一點從它的名字recylerview即回收view也可以看出。
2.RecyclerView的優點是什麼?
根據官方的介紹RecylerView是ListView的升級版,既然如此那RecylerView必然有它的優點,現就
RecylerView相對於ListView的優點羅列如下:
①RecylerView封裝了viewholder的回收複用,也就是說RecylerView標準化了ViewHolder,編寫
Adapter 面向的是ViewHolder而不再是View了,複用的 邏輯被封裝了,寫起來更加簡單。
②提供了一種插拔式的體驗,高度的解耦,異常的靈活,針對一個Item的顯示RecylerView專門抽取出
以通過LinearLayoutManager這個類來進行控制(與GridView效果對應的是GridLayoutManager,與瀑
布流對應的還有StaggeredGridLayoutManager等),也就是說RecylerView不再拘泥於ListView的線
RecylerView的ItemDecoration這個類,然後針對自己的業務需求去抒寫代碼。
③可以控制Item增刪的動畫,可以通過ItemAnimator這個類進行控制,當然針對增刪的動畫,
RecylerView有其自己默認的實現。

3.使用步驟:
  3.1導入recyclerView-v7包
  3.2在佈局文件中添加一個RecycleView
        <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
  3.3創建一個佈局文件用來給每一個Item佈局
  3.4聲明數據並與佈局文件中的控件進行綁定
     聲明RecycleView對象
     private RecyclerView recyclerView;
    聲明數據集合
    private List<Map<String, Object>> mList;
  3.5設置佈局管理器格式
     線性佈局管理器
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
  3.6 創建適配器   
      同ListView一樣,RecyclerView只負責顯示,而組建數據的任務,我們也需要一個Adapter來完成。 
     MyAdapter adapter = new MyAdapter();
     適配器與RecycleView進行綁定
    recyclerView.setAdapter(adapter);

           創建適配器 :**Adapter需要繼承自RecyclerView.Adapter**
           在這裏我們可以給Adapter一個泛型,這個泛型指定了該Adapter
           所使用的ViewHolder,如果不指定泛型,則默認是RecyclerView.ViewHolder,
           即自定義ViewHolder的父類
     class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHoler> {
      重寫3個方法
         當需要拿到ViewHolder 的時候就會調用,返回值與之前的泛型相同,在加載不同類型的佈局的時
         候,可以根據ViewType來創建不同的ViewHolder
         viewType是Item的數據類型
    public MyViewHoler onCreateViewHolder(ViewGroup parent, int viewType) {
    根據拿到的佈局文件創建一個ViewHolder
        View view =       
        LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item, null);

        MyViewHoler viewHoler = new MyViewHoler(view);
        return viewHoler;
    }

      當內容和佈局進行綁定的時候回調這個方法,每當有新數據進入屏幕的時候,也會回調這個方法
      參數holder和ViewHolder類型與泛型所規定的類型相同,
      參數position代表的是該item的位置可以通過position來獲取相應的數據
    public void onBindViewHolder(MyViewHoler holder, int position) {
        從數據列表中獲取數據
        String text = mList.get(position).get("text").toString();
        int image = (Integer) mList.get(position).get("image");
        將數據設置到界面上
        holder.textView.setText(text);
        holder.imageView.setImageResource(image);
    }

    返回數據的個數
    public int getItemCount() {
        return mList.size();
    }
  3.7創建ViewHolder
      與ListView的ViewHolder不同,RecyclerView的ViewHolder需要
      繼承自**RecyclerView.ViewHolder**
          class MyViewHoler extends RecyclerView.ViewHolder {
            TextView textView;
            ImageView imageView;
            public MyViewHoler(View itemView) {
                super(itemView);
                  進行控件關聯
                textView = (TextView) itemView.findViewById(R.id.textView);
                imageView = (ImageView) itemView.findViewById(R.id.imageView);
            }
         }
   **表格(GridLayoutManager)**
   將線性佈局管理器替換爲表格佈局管理器,就可以使用表格佈局
    recyclerView.setLayoutManager(new GridLayoutManager(this,3));
   第一個參數:上下文
   第二個參數:列數

    GridLayoutManager(Context context, int spanCount, int orientation,
        boolean reverseLayout)
    第二個參數spanCount表示表格的行數或者列數;第三個參數表示是水平滑動或者是豎直方向滑動;
    最後一 個參數表示是否從數據的尾部開始顯示。


   **瀑布流 (StaggeredGridLayoutManager)**
   將線性佈局管理器替換爲瀑布流佈局管理器,就可以使用瀑布流佈局       
   recyclerView.setLayoutManager(new    
   StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));
   第一個參數是行(或列的數目) 
   第二個參數是滾動方向,如果爲橫向滾動,則每一個item的行高固定 
   如果爲縱向滾動,則每一個item的列寬固定
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章