代码之家  ›  专栏  ›  技术社区  ›  Yevhen_Radchenko

无法将片段$companion强制转换为BottomNavigationView侦听器上的androidx.fragment.app.fragment

  •  1
  • Yevhen_Radchenko  · 技术社区  · 5 年前

    我的底部导航视图应该可以使用制表符,但是在某种程度上我不能转换

    碎片作为碎片

    再和安卓立德一起

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

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

    1 回复  |  直到 5 年前
        1
  •  1
  •   Gabriele Mariotti    5 年前

    改变

    val fragment = MissionListFragment
    

    val fragment = MissionListFragment()
    

    使用 fragment = MissionListFragment 你正在链接 companion object MissionChartFragment