ViewPager2+Fragment+TabLayout的使⽤实现类似的底部导航栏(。。。⽂章⽬录
效果
实现⽅案
ViewPager2 + Fragment 的使⽤
影流之主出装本⽂实现上述效果采⽤的⽅案为:ViewPager2 + Fragment + TabLayout,总体布局为在⼀个 Activity 中嵌⼊ ViewPager2 与TabLayout 两个控件,再使⽤ ViewPager2 对 3 个 Fragment进⾏管理,最后对 TabLayout 中的 item 和对应的 Fragment 之间进⾏关联。
要想使⽤ ViewPager2 ⾸先需要在 app\buildgradle 中添加依赖:
dependency {
...
implementation "androidx.viewpager2:viewpager2:1.0.0"
}
小说名字然后在需要使⽤的地⽅添加使⽤即可。
本问涉及的字符串内容在 res\l 中,内容如下:
<resources>
<string name="app_name">ViewPager2</string>
<string name="hello_blank_fragment">Hello blank fragment</string>
<string name="lorem_ipsum">Hello blank fragment</string>
<string name="musicClub">⾳乐馆</string>
<string name="recommend">推荐</string>
<string name="live">直播</string>
</resources>
⾸先需要准备三个 Fragment 备⽤,三个 Fragment 的名字为:HomeFragment、MyFragment 与 ScreenSlidePageFragment。因为重点不在 Fragment,因此三者布局类似,此处只展⽰ ScreenSlidePageFragment 的内容与 xml ⽂件的内容。
fragment_screen_l 的⽂件内容:
<!-- fragment_screen_l -->
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android="schemas.android/apk/res/android"
tools="schemas.android/tools"
layout_width="match_parent"
layout_height="match_parent"
context=".ScreenSlidePageFragment">
<TextView
layout_width="wrap_content"
layout_height="wrap_content"
layout_gravity="center"
lineSpacingMultiplier="1.2"
padding="16dp"
text="@string/lorem_ipsum"/>
</FrameLayout>
ScreenSlidePageFragment 的⽂件内容:
class ScreenSlidePageFragment :Fragment(){饥肠辘辘造句
朱丹结婚照
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View?{
return inflater.inflate(R.layout.fragment_screen_slide_page, container,false)
}
}
在将上述三个 Fragment 准备好后,就可以开始设置 ViewPager2 了,使⽤⽅式如下:本⽂的启动 Activity 为ScreenSlidePagerActivity,因此对应的 xml ⽂件 activity_screen_l 中的内容为:
<!-- activity_screen_l -->
<LinearLayout android="schemas.android/apk/res/android"
layout_width="match_parent"
layout_height="match_parent"
orientation="vertical">
<androidx.viewpager2.widget.ViewPager2
id="@+id/pager"
layout_width="match_parent"
layout_height="0dp"
layout_weight="1"/>
</LinearLayout>
ScreenSlidePagerActivity 的具体内容如下:
张赫的老婆class ScreenSlidePagerActivity :AppCompatActivity(){
private lateinit var viewPager2: ViewPager2
override fun onCreate(savedInstanceState: Bundle?){
setContentView(R.layout.activity_screen_slide_pager)
viewPager2 =findViewById(R.id.pager)
viewPager2.adapter =ScreenSlidePagerAdapter(this)
}
// 此处实现按⼀下返回键,跳转⾄左边⼀个 page
override fun onBackPressed(){
if(viewPager2.currentItem ==0){
}else{
viewPager2.currentItem -=1
}
}
变形记李耐阅微博
private inner class ScreenSlidePagerAdapter(fa: FragmentActivity):FragmentStateAdapter(fa){
// 实现 Fragment 的链表
private val fragmentList: List<Fragment>=
listOf(HomeFragment(),MyFragment(),ScreenSlidePageFragment())
override fun getItemCount()= fragmentList.size
override fun createFragment(position: Int): Fragment = fragmentList[position]
}
}
上述过程⾸先获取到 ViewPager2 的 id,其次创建了⼀个内部类作为 ViewPager2 的适配器,由于 ViewPager2 相当于 RacyclerView 的⼀个扩展版本,因此其适配器的内容也和 RecyclerView 的适配器内容很像。在适配器中创建了⼀个链表⽤来管理刚刚创建的 3 个Fragment,getItemCount() 因此返回的就是链表的⼤⼩,在 createFragment() 中就返回对应 position 的 Fragment。
此时运⾏结果如下: