![](/img/trans.png)
[英]Is it possible to get a reference to a Fragment's child View inside the onCreate() of Activity?
[英]Access Fragment View from Activity's onCreate
我正在制作我的第一个Android应用程序,我有一个Fragment
,可以在Activity
的onCreate()
方法中添加到我的Activity
中。 我面临的问题是我无法从Activity
的onCreate()
方法中找到Fragment
包含的任何视图。
其他线程建议这是因为Fragment
尚未被夸大,因此对于Fragment
包含的任何视图, findViewById()
将返回null。
这就是我的意思:
活动:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("activity onCreate");
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
return;
}
initialiseUI(); // Fragment added to Activity
System.out.println("end of activity onCreate");
}
分段:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
System.out.println("fragment onCreateView");
return inflater.inflate(R.layout.event_log, container, false);
}
这打印结果:
activity onCreate活动结束onCreate片段onCreateView
由于这个顺序,任何在Activity
的onCreate()
方法中访问Fragment
视图的尝试(使用findViewById()
)都会产生NullPointerException
,因为Fragment
的onCreateView()
仅在Activity
结束onCreateView()
调用是onCreate()
。
添加Fragment
后使用FragmentManger
的executePendingTransactions()
没有帮助。
基本上,我被迫将问题代码放在Activity
的onStart()
方法而不是onCreate()
,因为onStart()
发生在Fragment
的onCreateView()
。
这里的标准做法是什么,或者我如何使我的Fragment-View访问代码在Activity
的onCreate()
方法中工作?
在onCreateView()
更新您的视图。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.event_log, container, false);
TextView tv = (TextView) view.findViewById(R.id.text);
tv.setText("hello world");
return view;
}
或者,如果您的更改取决于您的Fragment
附加到的Activity
,请使用onActivityCreated()
。
@Override
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
TextView tv = (TextView) getView().findViewById(R.id.text);
tv.setText(getActivity.getSomeText());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.