这听起来像一个愚蠢的问题,但是onCreate中getArguments Bundle和Bundle之间有什么区别?Android - 在onCreate中收到的getArguments和Bundle有什么区别
回答
在onCreate中收到的Bundle包含最近提供的数据,如果重新创建活动并且getArguments Bundle返回作为参数提供的bundle。
用于创建片段和创建片段的参数集不能再次设置。 onCreate/onCreateView/onActivityCreated/onViewStateRestored中的包是savedInstanceState。你可以使用这个获得通过onSaveInstanceState
覆盖保留的持久值。在创建片段时,savedInstanceState包通常为空,因此您可能需要使用getArguments。
有关getArguments的另一件事,你不必坚持这些值。他们将通过fragment code为您重新创建。如果您尝试setArguments上已经有他们一个片段,你会碰到一个IllegalStateException
TL; DR:
Fragment.getArguments()是最初创建一个片段。
onCreate(Bundle)用于从前一个实例中检索Bundle。
详细:
我已经冲刷了这个网站,并要求经验丰富的Android开发者,所以这里是一个体面的解释:
的捆绑作为的onCreate参数传递函数用于存在片段的前一个实例,该函数在调用函数时会更新。 (你可以更多关于这个读了这里的官方文档:https://developer.android.com/training/basics/activity-lifecycle/recreating.html)
的Fragment.getArguments()功能然而,当最初创建片段使用。您将首次导航到片段,并且该片段的前一个实例将不存在。在这种情况下,您可以在使用setArguments()函数getArguments()函数共享的Fragment中设置局部变量。 (更多在这里:https://developer.android.com/reference/android/app/Fragment.html)
因此: 健壮的代码看起来是这样的:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
super.onCreateView(inflater, container, savedInstanceState);
mView = inflater.inflate(R.layout.fragment_name, container, false);
mContext = getActivity();
if(savedInstanceState != null){
Log.d("yourapp", "A SavedInstanceState exists, using past values");
mValue = savedInstanceState.getString("valueString");
}else{
Log.d("yourapp", "A SavedInstanceState doesn't exist");
Bundle bundle = getArguments();
mValue = bundle.getString("valueString");
}
}
负责处理这两种情况下你的onCreate状态。
希望这会有所帮助!
我想加到N15M0_jk的回答。 有时不需要保存片段状态(对于静态片段),并且只能使用进行重新创建,因为即使在破坏之后仍然保留使用setArguments()
设置的参数。
- 1. onCreate和onStart for Android之间有什么区别?
- 2. Bundle Identifier和Product Bundle Identifier有什么区别?
- 3. Android开发中Bundle和JSONObject的区别是什么?
- 4. Xamarin中Android中“savedInstanceState”和“bundle”的区别?
- 5. DailogFragment - getArguments/setArguments - 为什么要在一个bundle中传递参数?
- 6. android的abc.db和abc.sqlite有什么区别?
- 7. 有什么区别`和$(Bash中有什么区别?
- 8. 在android layout xml文件中,“?android:”和“@android:”有什么区别?
- 9. Android JPEG和libjpeg有什么区别?
- 10. android:gravity和android有什么区别:layout_gravity
- 11. android:layout_width和android有什么区别:width
- 12. Android:'orientation'和'screenLayout'有什么区别?
- 13. Android。 ShapeDrawable和GradientDrawable有什么区别?
- 14. bundle和gem install的区别?
- 15. Xamarin Forms(Android):OnCreate bundle为null
- 16. 在JavaScript中,'\'和'\ n'有什么区别?
- 17. =和在mysql中有什么区别?
- 18. 在Ember.js中,[]和Ember.A([])有什么区别?
- 19. 在PHP中!==和!=有什么区别?
- 20. *和。*在matlab中有什么区别?
- 21. !=和=!有什么区别!在Java中?
- 22. &&和||有什么区别?在JavaScript中?
- 23. 在Prolog中==和= =有什么区别?
- 24. 〜/和〜在linux中有什么区别?
- 25. onItemClick在Android中的“int”和“long”参数有什么区别
- 26. ==和===有什么区别?
- 27. ==和===有什么区别?
- 28. 有什么区别? :和||
- 29. ==和===有什么区别?
- 30. '=='和'==='有什么区别?
感谢参考,你已经解决了我的头痛,我不知道为什么是的onSaveInstanceState没用! – Burrich 2017-12-28 12:58:50