android-studio - 类型不匹配:推断的类型是 FragmentManager 但 FragmentActivity 是预期的
问题描述
因此,从 viewpager 迁移到 viewpager2 时,我在 Kotlin 中遇到了问题。下面是旧的工作代码和迁移到 viewpager2 的新尝试,以及我在运行新代码时收到的错误消息。
旧的工作代码 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
}
}
新的非工作代码 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.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
}
}
当我尝试运行最后一个代码时,出现以下错误
Type mismatch: inferred type is FragmentManager but FragmentActivity was expected
编辑: 如果有人好奇,我按照本指南从 ViewPager 迁移到 ViewPager2,这就是我得到“新的非工作代码”的方式。
编辑 2
错误来自这一行
viewPager2.adapter = MyAdapter(childFragmentManager)
,其中 childFragmentManager 是问题所在。有谁知道是否有可以与 FragmentActivity 一起使用的 childFragmentManager 的替代品?
解决方案
推荐阅读
- postgresql - Postgres 中是否有任何可能的方式来自动列出和存储新创建的表?
- arrays - 在 xquery 中使用带有 MarkLogic 的地图
- javascript - 在jquery中选择单选按钮时如何验证文本框?
- python - 有没有办法在 Python IDLE 中删除输出
- java - Java 字符串搜索 - 在字符串的任一侧搜索动态长度的文本
- javascript - Google Script Oauth v1.0 REST API 访问
- matlab - 在 Simulink 中将 [Nx1] 信号转换为 N 个单独的信号
- javascript - 在 Chrome / JSP、JAVASCRIPT 上设置 cookie SameSite=None 不起作用
- excel - Excel VBA使用带有子文件夹的for循环获取所有子文件夹名称。项目(键)。名称
- python - 从 c++ 代码运行 python 脚本并在 c++ 中使用 pythons 输出