ViewPager 要被廢棄?官方 ViewPager2 升級版來臨
熱文導讀| 點選標題閱讀
轉自:大頭呆
https://www.jianshu.com/p/e754cbd2d329
從文件註釋來看ViewPager2確實是用來替代ViewPager 的,順帶解決之前ViewPager的一些問題,並且加入了 RTL,豎向滾動支援,下面一起來詳細看下吧。
ViewPager2 replaces ViewPager, addressing most of its predecessor’s pain-points, including right-to-left layout support, vertical orientation, modifiable Fragment collections, etc.
1、概述
這兩天瀏覽安卓開發者官網的時候,發現google悄然推出了一個新的控制元件:ViewPager2,一看名稱就知道這是一個和我們常用的ViewPager功能相似的控制元件,算是ViewPager的升級版吧。目前還只是推出了第一個預覽版,我們可以直接引入來使用了:
implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha01'
https://developer.android.google.cn/reference/androidx/viewpager2/widget/ViewPager2
我們先來看看有哪些功能和使用上的變化:
新功能:
支援RTL佈局
支援豎向滾動
完整支援notifyDataSetChanged
API的變動:
FragmentStateAdapter替換了原來的 FragmentStatePagerAdapter
RecyclerView.Adapter替換了原來的 PagerAdapter
registerOnPageChangeCallback替換了原來的 addPageChangeListener
看了上面這些介紹,有一點比較吸引人的就是支援豎向滾動了,這是怎麼實現的呢?ViewPager2的原始碼不長,我們來簡單分析一下。
2、簡單解析
通過檢視原始碼得知,ViewPager2是直接繼承ViewGroup的,意味著和ViewPager不相容,類註釋上也寫了它的作用是取代ViewPager,不過短時間內ViewPager應該還不會被廢棄掉。
繼續檢視原始碼,發現了兩個比較重要的成員變數:
private RecyclerView mRecyclerView;
private LinearLayoutManager mLayoutManager;
所以很清楚得知,ViewPager2的核心實現就是RecyclerView+LinearLayoutManager了,因為LinearLayoutManager本身就支援豎向和橫向兩種佈局方式,所以ViewPager2也能很容易地支援這兩種滾動方向了,而幾乎不需要新增任何多餘的程式碼。
其實在此之前也不乏有大神采用RecyclerView來實現輪播圖效果的,具體實現發生略有不同,但大體思想是一致的。這次ViewPager2的推出意味著這種方法終於被扶正了。
為了讓RecyclerView變得像原來的ViewPager,需要設定下SnapHelper:
new PagerSnapHelper().attachToRecyclerView(mRecyclerView);
熟悉RecyclerView的同學都知道,SnapHelper用於輔助RecyclerView在滾動結束時將Item對齊到某個位置。PagerSnapHelper的作用讓滑動結束時使當前Item居中顯示,並且 限制一次只能滑動一頁,不能快速滑動,這樣就和viewpager的互動很像了。
另外和viewpager一樣,viewpager2可以承載fragment,我們需要繼承實現它提供的FragmentStateAdapter:
public abstract class FragmentStateAdapter extends
RecyclerView.Adapter<FragmentViewHolder> implements StatefulAdapter
這是一個包含FragmentManager和資料狀態恢復功能的RecyclerView.Adapter,具體實現可以參看原始碼。所以大家也可以用TabLayout+ViewPager2+Fragment來實現聯動展示效果。
3、使用
通過android:orientation來指定滾動方向
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewpager2"
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="vertical" />
在程式碼中設定一個普通的RecyclerView.adapter:
ViewPager2 viewPager2=findViewById(R.id.viewpager2);
RecyclerviewAdapter adapter = new RecyclerviewAdapter(this);
viewPager2.setAdapter(adapter);
這樣豎直輪播圖就大功告成了。
小結
viewpager2利用recyclerview來實現viewpager的功能,無疑使使其可擴充套件性大大提升,程式碼也變得更優雅簡潔,使用起來也更靈活。不過目前viewpager2只是第一個預覽版,還存在穩定性方面的問題,不建議大家引入到正式專案中來,嚐嚐鮮就好。
看完本文有收穫?請分享給更多人
喜歡就點「好看」唄~
相關文章
- Android ViewPager2 + Fragment 聯動AndroidViewpagerFragment
- Android ViewPager2 + Fragment + BottomNavigationView 聯動AndroidViewpagerFragmentNavigation
- FragmentContainerView、ViewPager、ViewPager2與 BottomNaviagtionView結合使用的區別FragmentAIViewpager
- ViewPager2重大更新,支援offscreenPageLimitViewpagerMIT
- 俄羅斯的 HTTPS 也要被廢了?HTTP
- SolarWinds:數字化時代來臨,ITOM也要轉型升級
- Vue 插槽 廢棄語法Vue
- 加油吧,原力計劃升級版來了!
- 手機直播原始碼,使用ViewPager2實現頁面滑動切換原始碼Viewpager
- go操作redis(已經廢棄)GoRedis
- JDK8-廢棄永久代(PermGen)迎來元空間(Metaspace)JDK
- 機器扭碎,強力消磁還能恢復!資料中心年年升級,廢棄“雲垃圾”讓谷歌頭大谷歌
- 蘋果釋出iOS 14.4正式版,官方釋出升級注意事項蘋果iOS
- Android startActivityForResult()廢棄了,代替方案案例Android
- Kubernetes 升級不棄 Docker:KubeKey 的絲滑之道Docker
- .NET 7 預覽版來啦,我升級體驗了
- chrome + vi 純手工模式, 廢棄滑鼠。Chrome模式
- [提問交流]看來官方已經拋棄這個框架了框架
- OPPO小布助手2.0強勢來襲 三大版塊迎來重大升級
- 來了!Python官方文件中文版Python
- PHP7.4 新特性和廢棄的功能PHP
- php5.5CURL圖片上傳廢棄@PHP
- 大資料:小白升級版大資料
- Excel轉Json升級版-PythonExcelJSONPython
- FinClip SaaS 版體驗升級
- Java工程師【2020升級版】Java工程師
- windows10 家庭版升級專業版的圖文步驟(無損升級)Windows
- 微信電腦版怎麼升級?微信PC版手動更新升級方法教程
- Node.js 最早 npm 包 request 將被廢棄Node.jsNPM
- kotlin-android-extensions外掛也被廢棄了KotlinAndroid
- win10專業版如何升級到企業版_win10專業版升級到企業版教程Win10
- iOS11.3.1正式版怎麼升級 iOS11.3.1更新升級攻略iOS
- 舊郵箱廢棄,GitHub 無法解綁帳號Github
- IDEA刪除已經廢棄不用的jdk選項IdeaJDK
- windows10預覽版怎麼升級正式版_windows10預覽版升級正式版步驟【圖為】Windows
- A10pro掉算力解決方案升級官方韌體
- OBCP實驗全面升級|官方為你送上備考攻略+福利
- JAVA 實現《超級瑪麗升級版》遊戲Java遊戲