Android ViewPager2 尝鲜

最近发现 Google 出了个 ViewPager2 用来代替 ViewPager,本着吃螃蟹的心,结果发现螃蟹果然不是好吃的

ViewPager2

首先说下 ViewPager2 最大的亮点,那就是支持垂直滚动,使用起来也非常简单

引入

1
implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha01'

布局

1
2
3
4
5
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">

</TextView>

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class ViewPager2Act : AppCompatActivity() {
private val mList = listOf("1", "2", "3")


override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.act_view_pager2)

viewPager2.adapter = object : RecyclerView.Adapter<ViewPager2ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewPager2ViewHolder {
return ViewPager2ViewHolder(LayoutInflater.from(this@ViewPager2Act).inflate(R.layout.item_view_pager2, parent, false))
}

override fun getItemCount(): Int {
return mList.size
}

override fun onBindViewHolder(holder: ViewPager2ViewHolder, position: Int) {
holder.setData(mList[position])
}

}
}

internal class ViewPager2ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
private val textView: TextView = itemView.findViewById(R.id.textView)

fun setData(data: String) {
textView.text = data
}
}

}

ViewPager2 将 ViewPager 的 PagerAdapter 替换成了 RecyclerView.Adapter,所以只要对 RecyclerView 有一定了解的话,写 Adapter 也是很容易的事情

写完了小 Demo ,运行报错

几番折腾,发现是 AndroidX 的问题,又是 Google 搞的新家伙,小研究了下,还是迁移到 AndroidX 比较好

https://developer.android.google.cn/jetpack/androidx/migrate

如此这般,迁移到 AndroidX 需要自己手动改的东西还是挺多的,Android Studio 提供的自动迁移只改了部分,代码中的得自己手动修改,所以如果是已经开发了的项目,谨慎迁移

接下来运行,OK

效果就不贴图了,谨以此记录