如何在片段的onCreate()中调用getArguments()?

时间:2014-04-24 19:20:31

标签: android android-fragments

有人可以解释setArguments()的工作原理吗?我不明白。我知道如何使用它,但我真的不明白下面的代码如何实际工作:

public class MyDialogFragment extends DialogFragment{

    public static MyDialogFragment newInstance(String test) {
        MyDialogFragment f = new MyDialogFragment();

        Bundle args = new Bundle();
        args.putString("test", test);
        f.setArguments(args);

        return f;
    }       


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Log.d("DEBUG", getArguments().getString("test")); // This actually works!
    }

}

我原本以为onCreate()在调用setArguments()之前被调用了,但很明显它没有。这是它应该工作的方式,还是只是纯粹的运气,setArguments()的调用在我的特定设备上onCreate()之前执行?相反的情况会发生在不同的情况下(更快/更慢/不同的设备等)?

也许有人可以指点我一篇描述这个事件流程如何运作的文章?我不会在上面的代码中看到onCreate()会被调用的地方,除非它是异步调用的,这对我来说听起来好像依赖于getArguments() onCreate()会有风险...

2 个答案:

答案 0 :(得分:0)

您的newInstance()是您自称的工厂方法。它创建Fragment对象并在其上设置参数。

然后将创建的片段对象传递给片段事务,最终使片段生命周期回调(例如onCreate())在适当的时间调用。

如果框架需要重新创建您的片段,例如由于方向更改,它将使用片段的no-arg构造函数并保留您在对象上设置的参数。第一次创建片段时,newInstance()等非常有用。

对于文档,Fragment类文档是一个很好的起点。

答案 1 :(得分:0)

onCreate()是一种方法,只有在片段附加到活动后才由框架调用,如Fragment Lifecycle中所示。