Fragment切换的解决方案
效果
点击左右划皆可,非常的丝滑…
底层
adapter
open class TabAdapterMK(private val tabList: List<Fragment>, fragmentManager: FragmentManager) :
FragmentPagerAdapter(fragmentManager) {
override fun getCount() = tabList.size
override fun getItem(position: Int): Fragment = tabList[position]
}
Kotlin代码 (activity,fragment)
initView <- onCreate()
//点击事件注册
vb.mainTab1.setOnClickListener(this)
vb.mainTab2.setOnClickListener(this)
initFragmentPager()
Viewpaper初始化
private fun initFragmentPager() {
val tabList = arrayListOf<Fragment>(FragmentOne(), FragmentTwo())
val adapterMK = TabAdapterMK(tabList, supportFragmentManager)
vb.mainViewpager.adapter = adapterMK
vb.mainViewpager.setOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrolled(position: Int,positionOffset: Float,positionOffsetPixels: Int) {}
override fun onPageSelected(position: Int) {
when (position) {
1 -> {vm.uiSelectedTab.setValue(1)}
else -> {vm.uiSelectedTab.setValue(0)}
}
}
override fun onPageScrollStateChanged(state: Int) {}
})
}
onClick:
override fun onClick(v: View?) {
when (v?.id) {
R.id.main_tab_1 -> {
vb.mainViewpager.setCurrentItem(0, false)}
R.id.main_tab_2 -> {
vb.mainViewpager.setCurrentItem(1, false)
}
}
}
布局
activity_main
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:toolbar="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="vm"
type="com.mozhimen.app.MainViewModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<androidx.viewpager.widget.ViewPager
android:id="@+id/main_viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="13"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<TextView
android:id="@+id/main_tab_1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@{vm.uiSelectedTab==0?@color/lightBlue:@color/white}"
android:gravity="center"
android:text="one"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/main_tab_2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@{vm.uiSelectedTab==1?@color/lightBlue:@color/white}"
android:gravity="center"
android:text="two"
tools:ignore="HardcodedText" />
</LinearLayout>
</LinearLayout>
</layout>