提问人:Dan 提问时间:8/25/2012 最后编辑:John CondeDan 更新时间:9/2/2012 访问量:40477
从 Activity 的 onCreate 访问片段视图
Access Fragment View from Activity's onCreate
问:
我正在制作我的第一个 Android 应用程序,我有一个添加到我的 in 方法中。我面临的问题是我无法找到 from 方法中包含的任何视图。Fragment
Activity
Activity
onCreate()
Fragment
Activity
onCreate()
其他线程建议这是因为 尚未膨胀,因此对于 中包含的任何视图都将返回 null。Fragment
findViewById()
Fragment
这就是我的意思:
活动:
@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);
}
这将打印结果:
活动 onCreate(创建) 活动结束 onCreate 片段 onCreateView
由于这个顺序,任何尝试访问 的视图 in 的 方法(使用 ) 都会产生一个 ,因为 's 只有在 的末尾才会被调用。Fragment
Activity
onCreate()
findViewById()
NullPointerException
Fragment
onCreateView()
Activity
onCreate()
添加 后使用 's 无济于事。FragmentManger
executePendingTransactions()
Fragment
基本上,我被迫将问题代码放在 的方法中,而不是像 之后发生的那样。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;
}
或者,如果您的更改取决于您的附加到,请使用 .Activity
Fragment
onActivityCreated()
@Override
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
TextView tv = (TextView) getView().findViewById(R.id.text);
tv.setText(getActivity.getSomeText());
}
评论
Fragment
Activity
onCreate()
Fragment
onCreateView()