这可能听起来像一个愚蠢的问题,但是在onCreate中收到的getArguments Bundle和Bundle有什么区别?
jar*_*smk 29
TL; DR:
Fragment.getArguments()用于初始创建片段.
onCreate(Bundle)用于从先前的实例中检索Bundle.
详细地:
我一直在网上搜索并询问经验丰富的Android开发人员,所以这里有一个不错的解释:
作为onCreate函数中的参数传递的Bundle 是for,如果存在Fragment的前一个实例,则在调用onSaveInstanceState函数时更新.(您可以在官方文档中阅读更多相关信息:https://developer.android.com/training/basics/activity-lifecycle/recreating.html)
该Fragment.getArguments()但功能,在最初创建片段使用.您将第一次导航到Fragment,并且该Fragment的前一个实例将不存在.在这种情况下,您可以使用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");
}
}
Run Code Online (Sandbox Code Playgroud)
它处理你的onCreate状态中的两种情况.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
6593 次 |
| 最近记录: |