类型不匹配:推断的类型为FragmentManager,但应为FragmentActivity

时间:2020-09-22 23:26:46

标签: android-studio kotlin android-viewpager android-viewpager2

因此,当我从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吗?

0 个答案:

没有答案