从Activity的onCreate访问片段视图

时间:2012-08-25 13:59:32

标签: android fragment oncreate findviewbyid

我正在制作我的第一款适用于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}}方法中工作?

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());
}