我正在制作我的第一个Android应用程序,我的Fragment
会在Activity
的onCreate()
方法中添加。我面临的问题是,我无法从Activity
的onCreate()
方法中找到Fragment
中包含的任何视图。
其他线程建议这是因为Fragment
还没有被填充,所以findViewById()
将返回null,而不是Fragment
中包含的任何视图。
这是我的意思:
Activity:
@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");
}
碎片(Fragment):
@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 end of activity onCreate fragment onCreateView
由于这个顺序,任何在Activity的onCreate()方法中尝试访问Fragment视图(使用findViewById())的尝试都会产生NullPointerException,因为Fragment的onCreateView()只会在Activity的onCreate()结束之后调用。
在添加Fragment之后使用FragmentManager的executePendingTransactions()也没有帮助。
基本上,我被迫将问题代码放在Activity的onStart()方法中而不是onCreate()中,因为onStart()发生在Fragment的onCreateView()之后。
有人知道这里的标准做法吗?或者我如何使我的Fragment-View访问代码在Activity的onCreate()方法中工作?
Activity
зҡ„onCreate()
ж–№жі•дёӯи®ҝй—®Fragment
зҡ„и§ҶеӣҫпјҹиҝҷиҜҙжҳҺдҪ зҡ„и®ҫи®Ўжңүй—®йўҳгҖӮ - biegleuxFragment
的onCreateView()
方法中更新您的片段布局。请参阅我的答案。 - biegleux