从Activity的onCreate访问片段视图

Dan*_*Dan 28 android fragment oncreate findviewbyid

我在我的第一应用为Android的过程中,我有一个Fragment是被添加到我ActivityActivityonCreate()方法.我现在面临的问题是,我无法找到任何的内部包含的意见,FragmentActivityonCreate()方法.

其他线程建议这是因为Fragment尚未充气,因此findViewById()将为包含在其中的任何视图返回null 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");
}
Run Code Online (Sandbox Code Playgroud)

分段:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) {
System.out.println("fragment onCreateView");
    return inflater.inflate(R.layout.event_log, container, false);
}
Run Code Online (Sandbox Code Playgroud)

这打印结果:

activity onCreate活动结束onCreate片段onCreateView

因为这个命令,任何试图访问的意见FragmentActivityonCreate()方法(使用findViewById())产生一个NullPointerException作为FragmentonCreateView()唯一被调用的结束之后ActivityonCreate().

使用添加后的FragmentManger's 没有帮助.executePendingTransactions()Fragment

基本上,我不得不把问题代码中ActivityonStart()方法,而不是onCreate()作为onStart()后会发生FragmentonCreateView().

有没有人有什么标准的做法在这里,否则我怎么可以让我的片段-视图-访问中的代码工作ActivityonCreate()方法是什么?

bie*_*eux 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;
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您的更改取决于ActivityFragment连接到,使用onActivityCreated().

@Override
public void onActivityCreated (Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    TextView tv = (TextView) getView().findViewById(R.id.text);
    tv.setText(getActivity.getSomeText());
}
Run Code Online (Sandbox Code Playgroud)