因此,当我从Viewpager迁移到Viewpager2时,我在Kotlin中遇到问题。 以下是旧的工作代码,以及尝试迁移到viewpager2的新尝试,以及运行新代码时收到的错误消息。
旧的工作代码 DashboardFragment.kt
Quiz
新的无效代码 DashboardFragment.kt
package com.example.profilside.ui.dashboard
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager
import com.example.profilside.R
class DashboardFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val root = inflater.inflate(R.layout.fragment_dashboard, container, false)
val viewPager = root.findViewById(R.id.view_pager2) as ViewPager
// Important: Must use the child FragmentManager or you will see side effects.
viewPager.adapter = MyAdapter(childFragmentManager)
return root
}
class MyAdapter internal constructor(fm: FragmentManager) : FragmentPagerAdapter(fm) {
override fun getCount(): Int = 2
override fun getItem(position: Int): Fragment {
if(position == 0){
return ProfileStatsFragment.newInstance()
}
else {
return ProfilePlatformsFragment.newInstance()
}
}
override fun getPageTitle(position: Int): CharSequence = "Tab $position"
}
companion object {
val TAG: String = DashboardFragment::class.java.name
}
}
当我尝试运行最后的代码时,出现以下错误
package com.example.profilside.ui.dashboard
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.example.profilside.R
class DashboardFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val root = inflater.inflate(R.layout.fragment_dashboard, container, false)
val viewPager2 = root.findViewById(R.id.view_pager2) as ViewPager2
// Important: Must use the child FragmentManager or you will see side effects.
viewPager2.adapter = MyAdapter(childFragmentManager)
return root
}
class MyAdapter internal constructor(fa: FragmentActivity) : FragmentStateAdapter(fa) {
override fun getItemCount(): Int = 2
override fun createFragment(position: Int): Fragment {
if (position == 0) {
return ProfileStatsFragment.newInstance()
} else {
return ProfilePlatformsFragment.newInstance()
}
}
}
companion object {
val TAG: String = DashboardFragment::class.java.name
}
}
编辑: 如果有人好奇,我按照this guide从ViewPager迁移到ViewPager2,这就是我得到“新的无效代码”的方法。
编辑2
错误来自此行
Type mismatch: inferred type is FragmentManager but FragmentActivity was expected
,其中childFragmentManager是问题所在。有人知道是否可以使用FragmentActivity替换childFragmentManager吗?