亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

NavigationComponent 中的 IllegalStateException

NavigationComponent 中的 IllegalStateException

DIEA 2023-08-16 16:18:18
我在我的應用程序中使用 Jetpack 的導航組件。我有 2 個片段,例如 FirstFragment 和 SecondFragment,并且我在導航圖中從第一個片段到第二個片段進行導航。這樣一切正常。我想將子片段添加到 FirstFragment。所以在 FirstFragment 類的 onCreateView 方法中我添加了這一行getChildFragmentManager().beginTransaction().add(R.id.fragment_container, new SimpleFragment()).commit();這樣我在 FirstFragment 中有一個內部片段。從 FirstFragment 導航到 SecondFragment 仍然可以正常工作,但是當我按 SecondFragment 中的后退按鈕時,出現此錯誤E/AndroidRuntime: FATAL EXCEPTION: main    Process: com.abc.def, PID: 28856    java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.        at android.view.ViewGroup.addViewInner(ViewGroup.java:4937)        at android.view.ViewGroup.addView(ViewGroup.java:4768)        at android.view.ViewGroup.addView(ViewGroup.java:4708)        at android.view.ViewGroup.addView(ViewGroup.java:4681)        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1353)        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1642)        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1736)        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1800)        at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3096)        at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:3050)        at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2688)如果我按后退按鈕或撥打navController.navigateUp()或 ,我會收到此錯誤navController.popBackStack()。如果我刪除該行getChildFragmentManager().beginTransaction().add(R.id.fragment_container, new SimpleFragment()).commit();從 FirstFragment 我沒有錯誤,所以這意味著子片段管理器有問題,對吧?這里有什么問題嗎?
查看完整描述

2 回答

?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

問題出在 SimpleFragment 中。我一直引用該片段的根視圖(有View mRootView字段),并且不會重新創建它,以防它不為空。



查看完整回答
反對 回復 2023-08-16
?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

如果我正確理解這一點,而不知道您擁有什么,而不查看“ fragment_container”的布局,那么我會告訴我,如果您不向其提供更多信息,則其類型ViewGroup此時只能有一個子級。


這意味著fragment_container已經有一個孩子,您需要在添加SimpleFragment.


假設您有第一個片段布局,如下所示


<someView>


? <fragment_container/>? // hear you are loading your first fragment and trying load the SimpleFragment as well which is causing problem.


</someView>

你需要的是


<someView>


? <fragment_container/>? only load First Fragment "first_fragment_layout.xml"


</someView>

在第一個片段的布局中


第一個_fragment_layout.xml


<someView>


? <viewBlasBla/>


? <viewBlasBla/>


? <fragment_container/>? load SimpleFragment here


</someView>

正如您所看到的,您確實正在嘗試執行嵌套片段,這不是一個好的實踐。如果可能的話盡量避免這種情況:)。


查看完整回答
反對 回復 2023-08-16
  • 2 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號