繁体   English   中英

从Activity的onCreate访问片段视图

[英]Access Fragment View from Activity's onCreate

我正在制作我的第一个Android应用程序,我有一个Fragment ,可以在ActivityonCreate()方法中添加到我的Activity中。 我面临的问题是我无法从ActivityonCreate()方法中找到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

由于这个顺序,任何在ActivityonCreate()方法中访问Fragment视图的尝试(使用findViewById() )都会产生NullPointerException ,因为FragmentonCreateView()仅在Activity结束onCreateView()调用是onCreate()

添加Fragment后使用FragmentMangerexecutePendingTransactions()没有帮助。

基本上,我被迫将问题代码放在ActivityonStart()方法而不是onCreate() ,因为onStart()发生在FragmentonCreateView()

这里的标准做法是什么,或者我如何使我的Fragment-View访问代码在ActivityonCreate()方法中工作?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM