[英]Call fragment from activity in android
我目前正在使用Fragment中的項目。 但是在這里,當我從Fragment調用活動類時,它運行得很好。 我要做的是在Back Pressed上我需要調用一個Fragment.But我不能,它向我顯示錯誤並且我的應用程序停止。
所以我的問題是我如何從活動中調用片段,以便我的序列應為片段>活動>片段。
07-11 16:22:12.190:E / AndroidRuntime(11963):java.lang.IllegalStateException:onSaveInstanceState之后無法執行此操作
&當我想從片段中調用活動時,給出錯誤
07-11 15:52:25.961:E / FragmentManager(11885):找不到ID為0x7f05003c的片段的視圖
那么,我怎么稱呼活動中的片段和活動中的片段?
嘗試改變
transaction.commit();
至
transaction.commitAllowingStateLoss();
或在您的活動中注釋掉超級onSaveInstance方法:
@Override
protected void onSaveInstanceState(Bundle outState) {
//super.onSaveInstanceState(outState);
}
要從片段中調用活動,可以使用:
((YourActivity)getActivity).someMethod();
java.lang.IllegalStateException:onSaveInstanceState之后無法執行此操作
解:
使用transaction.commitAllowingStateLoss();
添加或執行導致異常的FragmentTransaction
。
Why was the exception thrown?
引發異常是因為您在保存活動狀態之后嘗試提交FragmentTransaction,從而導致稱為活動狀態丟失的現象。
在調用onSaveInstanceState()
FragmentTransaction#commit()
之后調用FragmentTransaction#commit()
,該事務將不會被記住,因為該事務從未被記錄為Activity狀態的一部分。 從用戶的角度來看,事務將看起來丟失,從而導致意外的UI狀態丟失。 為了保護用戶體驗,Android不惜一切代價避免了狀態丟失,只要發生IllegalStateException
便會拋出該異常。
注意:
只能將commitAllowingStateLoss()
用作最后的手段。 調用commit()
和commitAllowingStateLoss()
之間的唯一區別是,如果發生狀態丟失,后者將不會引發異常。 通常,您不想使用此方法,因為它暗示有可能發生狀態丟失。 當然,更好的解決方案是編寫您的應用程序,以便確保在保存活動狀態之前調用commit(),因為這將帶來更好的用戶體驗。 除非無法避免丟失狀態, commitAllowingStateLoss()
不應該使用commitAllowingStateLoss()
。
更多信息來自: fragment-transaction-commit-state-loss 。
FragmentManager(11885):找不到ID為0x7f05003c的片段的視圖
解:
片段管理器無法根據您在活動的setContentView
的布局中設置的內容使用R.id.Container
查找視圖。
因此,無論您在setContentView
設置的布局如何,該布局都不包含ID解析為0x7f05003c
ID為0x7f05003c
的R.id.Container
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.