【问题标题】:Fragment$Companion cannot be cast to androidx.fragment.app.Fragment on BottomNavigationView listenerFragment$Companion 无法在 BottomNavigationView 侦听器上强制转换为 androidx.fragment.app.Fragment
【发布时间】:2019-10-28 08:16:29
【问题描述】:

我的底部导航视图应该与标签一起使用,但在某些方面我无法投射

片段作为片段

不再使用 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)

有我的活动:

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

我的空片段:

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 用法,但这个解决方案对我的问题没有帮助。

【问题讨论】:

  • 由于您使用的是 androidx 库,因此您的 Fragment 必须扩展 androidx.fragment.app.Fragment
  • 它在两个片段中扩展androidx.fragment.app.Fragment
  • 发布 MissionListFragment 类
  • 发布 MissionChartFragment 以简化阅读
  • 你为什么使用演员fragment as Fragment?它应该只是一个androidx.fragment.app.Fragment

标签: android android-fragments kotlin androidx fragmentmanager


【解决方案1】:

改变

val fragment = MissionListFragment

val fragment = MissionListFragment()

使用fragment = MissionListFragment 链接companion objectMissionChartFragment

【讨论】:

  • 像魅力一样工作,错过了构造函数是问题,gratz
猜你喜欢
  • 2021-03-21
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多