有人可以解释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()
会有风险...
答案 0 :(得分:0)
您的newInstance()
是您自称的工厂方法。它创建Fragment
对象并在其上设置参数。
然后将创建的片段对象传递给片段事务,最终使片段生命周期回调(例如onCreate()
)在适当的时间调用。
如果框架需要重新创建您的片段,例如由于方向更改,它将使用片段的no-arg构造函数并保留您在对象上设置的参数。第一次创建片段时,newInstance()
等非常有用。
对于文档,Fragment类文档是一个很好的起点。
答案 1 :(得分:0)
onCreate()
是一种方法,只有在片段附加到活动后才由框架调用,如Fragment Lifecycle中所示。