从android中的活动调用片段

时间:2014-07-11 10:56:08

标签: android android-activity android-fragments

我目前正在处理使用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的视图

那么,我怎么能从活动中调用片段呢?来自片段的活动?

2 个答案:

答案 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的视图。