android - Fragment$Companion 无法在 BottomNavigationView 监听器上转换为 androidx.fragment.app.Fragment

标签 android android-fragments kotlin androidx fragmentmanager

我的底部导航 View 应该与选项卡一起使用,但在某种程度上我无法转换

fragment as Fragment

不再使用 AndroidX

每次点击菜单项时都会崩溃

    java.lang.ClassCastException: com.spacexmonitor.MissionListFragment$Companion cannot be cast to androidx.fragment.app.Fragment
            at com.spacexmonitor.MainActivity$onCreate$menuOnNavigationItemSelectedListener$1.onNavigationItemSelected(MainActivity.kt:28)

这是我的 Activity :

    import android.os.Bundle
    import androidx.appcompat.app.AppCompatActivity
    import androidx.fragment.app.Fragment
    import kotlinx.android.synthetic.main.activity_main.*

    class MainActivity : AppCompatActivity() {

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)

            val fragmentManager = supportFragmentManager
            val fragmentTransaction = fragmentManager.beginTransaction()

            if (savedInstanceState == null) {
                fragmentTransaction.replace(R.id.container, MissionListFragment())
                fragmentTransaction.commit()
            }

            val menuOnNavigationItemSelectedListener =
                bottomNavigationBar.setOnNavigationItemSelectedListener { item ->
                    when (item.itemId) {
                        R.id.launchesMenuItem -> {
                            val fragment = MissionListFragment
                            fragmentTransaction.replace(R.id.container, fragment as Fragment)
                                .commit()

                            return@setOnNavigationItemSelectedListener true
                        }
                        R.id.chartsMenuItem -> {
                            val fragment = MissionChartFragment
                            fragmentTransaction.replace(R.id.container, fragment as Fragment)
                                .commit()

                            return@setOnNavigationItemSelectedListener true
                        }
                    }
                    false
                }
        }
    }

我的空 fragment :

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup

class MissionChartFragment : Fragment() {

    companion object {
        private val MISSION_CHART = "mission chart"
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?): View? {

        return inflater.inflate(R.layout.fragment_mission_chart, container, false)
    }
}

这里的很多答案都是将 app.Fragment 更改为 v4.Fragment 用法,但此解决方案对解决我的问题没有帮助。

最佳答案

改变

val fragment = MissionListFragment

val fragment = MissionListFragment()

使用fragment = MissionListFragment,您可以链接MissionChartFragment伴随对象

关于android - Fragment$Companion 无法在 BottomNavigationView 监听器上转换为 androidx.fragment.app.Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58587525/

相关文章:

android - Kotlin:无法重新分配 LatLng 的纬度/经度

mockito - 如何使用 mockito 在 kotlin 中验证对 setter 的调用?

android - 如何在 Room DB 中创建实体并使用某些字段扩展其他类

android - 多语言安卓应用问题

android - 替换的 fragment 仍然有效

java - 为什么我在 Android Studio 中不断收到 java.lang.nullpointerException?

即使显示其他 fragment ,Android ViewPager onClickListener 也会使用react

android - 在 Android studio 4.0 中发现了多个 OS 独立路径 'META-INFmodule_debug.kotlin_module' 的文件

android - 如何实现 ALTER TABLE 的示例

java - 如何以编程方式在android中打开文件夹?