簡體   English   中英

從Android中的活動調用片段

[英]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為0x7f05003cR.id.Container

暫無
暫無

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

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