淺談ListView和RecyclerView

      Listview想必大家都知道,用法更是熟的不能再熟了,但是ListView有它的侷限性,擴展性也不太好,比如它只能縱向滾動,無法實現橫向滾動。爲此android提供了一個更強大的滾動控件——RecyclerView,它是一個增強版的ListView,優化了ListView中存在的各種不足,目前Android官方更加推薦使用RecyclerView.

      如何使用?

     我們在用之前還是要添加依賴庫:compile 'com.android.support:recyclerview-v7:24.2.1

     在xml佈局文件中做如此修改:將ListView標籤改爲 <android.support.v7.widget.RecyclerView/>,因爲本博客主要介紹這兩個控件的區別,所以不再粘貼代碼,只對他們在使用時的不同之處做一下講解。

     同樣需要一個適配器,只是RecyclerView繼承RecyclerView.Adapter<MyAdapter.ViewHolder>  當然ViewHolder是MyAdapter的內部類。這樣MyAdapter就必須重寫RecyclerView.Adapter的三個方法onCreateViewHolder(),加載佈局文件,創建ViewHolder實例,返回值爲ViewHolder; onBindViewHolder(),爲控件賦值處理數據;getItemCount()返回RecycleView一共有多少子項也就是說數據集的數據條數目。

    與ListView相比,分工更明確,更容易理解。

     Activity的onCreate()方法中我們需要創建一個LayoutManager用來指定RecyclerView的佈局方式:LinearLayoutManager線性佈局,GridLayoutManager網格佈局和StaggeredGridLayoutManager瀑布流佈局。

    下面舉例說明:

     LinearLayoutManager:

       LinearLayoutManager layoutManager = new LinearLayoutManager(this)
       recyclerView.setLayoutManager(layoutManager);
         LinearLayoutManager默認是vertical豎向排列,若是想橫向滾動排列,設置item佈局的寬度爲定值,比如100dp,onCreate()方法中再加一行代碼

    

       layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL)

     StaggeredGridLayoutManager:

              需要修改item佈局文件的layout_width = match_parent,不能設置爲指定值,因爲瀑布流佈局的寬度應該是根據佈局的列數來自動適配的。

         onCreate()方法中應該這樣寫

               

       StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,,StaggeredGridLayoutManager.VERTICAL);
       recyclerView.setLayoutManager(layoutManager);
            3代表了列數,StaggeredGridLayoutManager.VERTICAL代表了瀑布流的方向,表示佈局縱向排列

       還要一個值得一提的知識就是RecyclerView的點擊事件。

       RecyclerView沒有像ListView一樣的setOnItemClickListener()事件,而是需要我們自己給子項具體的View設置註冊點擊事件,這個在onCreateViewHolder中去寫點擊事件就OK了。

       像我們認爲很複雜的聊天記錄界面,用這個RecyclerView去實現最合適不過了。

       最後我再寫兩個RecycleView最常用的2個方法,當我們的數據源改變需要更新adapter時,用adapter.notifyItemInserted(size - 1);當我們需要定位到最後一行,保證用戶隨時看到最新的,就像QQ聊天界面一樣,我們需要用到 recyclerView.scrollToPosition(size-1).

       好了,這個講完了,下個項目,大家是不是可以嘗試用RecyclerView而不是ListView了呢?哈哈。

      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章