我正在制作我的第一款适用于Android的应用,我的Fragment
已添加到Activity
的{{1}}方法Activity
中。我遇到的问题是,我无法从onCreate()
的{{1}}方法中找到Fragment
中包含的任何观点。
其他主题提示这是因为Activity
尚未夸大,因此onCreate()
将为Fragment
中包含的任何视图返回null。
这就是我的意思:
的活动:
findViewById()
片段:
Fragment
打印结果:
活动onCreate 活动结束时创建 片段onCreateView
由于此订单,任何尝试访问@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");
}
的{{1}}方法中的@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
System.out.println("fragment onCreateView");
return inflater.inflate(R.layout.event_log, container, false);
}
视图(使用Fragment
)都会产生{{1} },因为Activity
的{{1}}仅在onCreate()
的{{1}}结束后被调用。
添加findViewById()
后使用NullPointerException
的{{1}}无效。
基本上,我被迫将问题代码放在Fragment
的{{1}}方法而不是onCreateView()
中,因为Activity
发生在onCreate()
之后} FragmentManger
。
这里的标准做法是什么,或者我如何使我的片段视图访问代码在executePendingTransactions()
的{{1}}方法中工作?
答案 0 :(得分:22)
在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;
}
如果您的更改取决于Activity
附加的Fragment
,请使用onActivityCreated()
。
@Override
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
TextView tv = (TextView) getView().findViewById(R.id.text);
tv.setText(getActivity.getSomeText());
}