【问题标题】:OnBackPress App is crash when back From Activity to FragmentOnBackPress 应用程序从 Activity 返回到 Fragment 时崩溃
【发布时间】:2018-04-25 16:10:48
【问题描述】:

我在我的应用程序中使用抽屉菜单。我从菜单中选择一个选项并打开片段,然后从该片段调用一个 Activity。因为这里它工作正常,但是当我按下返回按钮(OnbackPress)时,应用程序崩溃了。 下面是错误。 “无法启动活动...ClassCastException...无法转换为 Home_Tab”

这是 MainActivity 代码。

if (savedInstanceState == null) {
        homefragment = Home_tab()
        fragmentTransaction = fragmentManager!!.beginTransaction()
        fragmentTransaction!!.replace(R.id.frame, homefragment)
        fragmentTransaction!!.addToBackStack(null)
        fragmentTransaction!!.commit()
    } else {
        homefragment = supportFragmentManager.fragments[0] as Home_tab //Crash at this line 
 }

调用 backPress 的代码。

override fun onBackPressed() {
    super.onBackPressed()
    finish()
}

【问题讨论】:

  • 能否请您也更新一下您的 Home_tab 类代码。看起来它与您尝试投射的内容不同。
  • 您是否尝试查看堆栈跟踪以了解错误是什么?可能想将其添加到问题中,以便我们也知道出了什么问题:p

标签: android android-fragments kotlin


【解决方案1】:
//Add a check like this before casting. 
//It is a smart cast and you can directly use the result.
Fragment fragmentZero = supportFragmentManager.fragments[0]
if (fragmentZero is Home_tab) {
   //Casting is done, you can directly use fragment here
   homefragment = fragmentZero
}

【讨论】:

    【解决方案2】:

    好吧,根据您的代码,您将片段添加到片段管理器(常规),但尝试从支持片段管理器取回它。这是两个不同的类,你的片段只能扩展一个

    【讨论】:

      【解决方案3】:

      您是 mixin 片段管理器和支持片段管理器,我会支持一个,因为这是正确的方法。要获取添加了容器 ID 的当前显示片段,请使用 findFragmentById

      if (savedInstanceState == null) {
              homefragment = Home_tab()
              supportFragmentManager?.let{
                  fragmentTransaction = it.beginTransaction()
                  fragmentTransaction.replace(R.id.frame, homefragment)
                  fragmentTransaction.addToBackStack(null)
                  fragmentTransaction.commit()
              }
          } else {
              homefragment = supportFragmentManager.findFragmentById(R.id.frame) as Home_tab
       }
      

      【讨论】:

      • 我已经用这个替换了我的代码。它在其他设备上运行良好,但在 Redmi 4 设备中应用程序崩溃。设备配置为:Android OS 7.1.2 N2G47H,MIUI 版本 MIUI Global 9.2|稳定 9.2.4.0(NAMMIEK),2GB RAM,16GB ROM.CPU 八核 Max 1.10GHz。
      • 八核最大 1.40GHz
      猜你喜欢
      • 1970-01-01
      • 2016-08-27
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多