簡體   English   中英

從活動返回到片段時,OnBackPress應用程序崩潰

[英]OnBackPress App is crash when back From Activity to Fragment

我在我的應用程序中使用抽屜菜單。我從菜單中選擇一個選項並打開片段,然后從該片段中調用一個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()
}
//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
}

好吧,根據您的代碼,您可以將片段添加到fragmentmanager(常規片段)中,但是嘗試從supportfragmentmanager取回它。 那是兩個不同的類,您的片段只能擴展一個

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM