Android - onCreate中收到的getArguments和Bundle有什么区别

And*_*Dev 21 android

这可能听起来像一个愚蠢的问题,但是在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状态中的两种情况.

希望这可以帮助!


小智 2

如果重新创建活动,则 onCreate 中收到的 Bundle 包含最近提供的数据,并且 getArguments Bundle 返回作为参数提供的 Bundle。