我目前正在处理使用Fragment的项目。但是,在这里,当我打电话给活动类From 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的视图
那么,我怎么能从活动中调用片段呢?来自片段的活动?
答案 0 :(得分:1)
尝试更改
transaction.commit();
到
transaction.commitAllowingStateLoss();
或者在您的活动中注释掉超级onSaveInstance方法:
@Override
protected void onSaveInstanceState(Bundle outState) {
//super.onSaveInstanceState(outState);
}
要从您可以使用的片段调用活动:
((YourActivity)getActivity).someMethod();
答案 1 :(得分:1)
java.lang.IllegalStateException: 在onSaveInstanceState
之后无法执行此操作
解决方案:
添加或执行时使用transaction.commitAllowingStateLoss();
导致异常的FragmentTransaction
。
Why was the exception thrown?
抛出异常是因为您在保存活动状态后尝试提交FragmentTransaction,从而导致称为活动状态丢失的现象。
在调用FragmentTransaction#commit()
后致电onSaveInstanceState()
时,交易不会被记住,因为它从未作为活动状态的一部分记录在第一个地点。从用户的角度来看,交易似乎会丢失,导致意外的UI状态丢失。为了保护用户体验,Android不惜一切代价避免状态损失,并且只要发生IllegalStateException
就会抛出。{/ em>
注意:
仅作为最后手段使用commitAllowingStateLoss()
。调用commit()
和commitAllowingStateLoss()
之间的唯一区别是,如果发生状态丢失,后者不会抛出异常。通常你不想使用这种方法,因为这意味着可能会发生状态损失。当然,更好的解决方案是编写应用程序,以便在保存活动状态之前保证调用commit(),因为这将带来更好的用户体验。除非无法避免国家损失的可能性,否则不应使用commitAllowingStateLoss()
。
更多来自:fragment-transaction-commit-state-loss。
FragmentManager(11885):找不到用于片段的id 0x7f05003c的视图
<强>解决方案:强>
根据您在R.id.Container
活动的布局中设置的内容,片段管理器无法找到setContentView
的视图。
因此,无论您在setContentView
中设置了哪种布局,该布局都不包含具有解析为0x7f05003c
{id} R.id.Container
的ID的视图。