2014-07-11 127 views
1

我目前正在使用Fragment中的项目。但在这里,当我打电话给活动类从片段它完美运行。我必须做的是在Back Pressed上我需要调用Fragment。但是我不能,它显示我错误并且我的应用程序停止。从android中的活动调用片段

所以我在这里的问题是,我怎么能从活动调用片段,以便我的序列应该是片段>活动>片段。

07-11 16:22:12.190:E/AndroidRuntime(11963):java.lang.IllegalStateException:当我想打电话从片段的onSaveInstanceState活动

&后无法执行此操作它是给错误

07-11 15:52:25.961:E/FragmentManager(11885):未找到ID为0x7f05003c片段

视图

那么,我怎样才能从片段活动&活动中调用片段?

回答

1

尝试改变

transaction.commit(); 

transaction.commitAllowingStateLoss(); 

或注释掉您的活动超onSaveInstance方法:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    //super.onSaveInstanceState(outState); 
} 

要从片段致电活动,你可以使用:

((YourActivity)getActivity).someMethod(); 
+0

有几个原因可以避免这种情况,这里描述http://stackoverflow.com/questions/17184653/commitallowingstateloss-in-fragment-activities –

1
  • java.lang.IllegalStateException:以后的onSaveInstanceState可以 不执行此操作

解决方案:

使用transaction.commitAllowingStateLoss();添加或执行 的FragmentTransaction时这是造成的例外。

Why was the exception thrown? 

异常被抛出,因为你尝试的活动的状态已经被保存后犯下FragmentTransaction,导致被称为活动状态丢失的现象。

当你调用onSaveInstanceState()FragmentTransaction#commit()被调用时,交易将不被记住,因为它从来没有记录在首位的活动的状态的一部分。从用户的角度来看,交易似乎会丢失,导致意外的UI状态丢失。为了保护用户体验,Android可以不惜一切代价避免状态丢失,并且只要发生它就会抛出一个IllegalStateException

注:

使用commitAllowingStateLoss()只能作为最后的手段。拨打commit()commitAllowingStateLoss()的唯一区别在于,如果状态丢失发生,后者不会抛出异常。通常你不想使用这种方法,因为它意味着有可能发生状态损失。当然,更好的解决方案是编写应用程序,以确保在保存活动状态之前调用commit(),因为这会带来更好的用户体验。除非无法避免状态丢失的可能性,否则不应使用commitAllowingStateLoss()

更多来自:fragment-transaction-commit-state-loss

  • FragmentManager(11885):未找到ID 0x7f05003c的片段视图

解决方案:

片段经理能不能够找到一个视图, R.id.Container根据您在setContentView的布局中设置的活动。

所以,无论你的布局在setContentView已设置,该布局不包含与ID解析为ID 0x7f05003c说的R.id.Container这一观点。