0
点赞
收藏
分享

微信扫一扫

【Android,kotlin】不再生硬!多Fragment切换的解决方案


Fragment切换的解决方案

效果

【Android,kotlin】不再生硬!多Fragment切换的解决方案_xml
【Android,kotlin】不再生硬!多Fragment切换的解决方案_移动开发_02
点击左右划皆可,非常的丝滑…

底层

​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>


举报

相关推荐

0 条评论