4

View片段的变量可以通过这种方式在onCreateView方法中初始化。这里TextView是片段内部。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragmant_two,container,false);
    if(savedInstanceState == null)
    {

    }
    else
    {
        String data = savedInstanceState.getString("data");
        TextView myText = (TextView)view.findViewById(R.id.text_view);
        myText.setText(data);
    }


    return view;


}

但是我发现里面onActivityCreated 是用这种方式初始化了一个视图。

textView = (TextView) getActivity().findViewById(R.id.text_view);

onActivityCreated有 什么理由我应该选择onCreateView吗?

4

5 回答 5

6
textView = (TextView) getActivity().findViewById(R.id.text_view);

这将尝试R.id.text_view从您的活动布局中找到具有 id 的视图,而不是您的片段。如果您的片段本身中存在具有该 ID 的视图,那么您应该在onCreateView片段中使用该方法。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragmant_two,container,false);
    TextView textView = (TextView) view.findViewById(R.id.text_view);
    // bind your data here.
    return view;
}
于 2017-03-03T12:16:01.083 回答
2

显然使用了onActivityCreated,因为视图是在Activity上找到的。

不过,您也可以使用 onAttach 。

就个人而言,onViewCreated 是我放置片段视图初始化的地方

于 2017-03-03T08:54:14.260 回答
1

你可以参考这个问题来了解更多关于 onActivityCreated 和 onCreateView here

创建():

Fragment 中的 onCreate() 方法在 Activity 的 onAttachFragment() 之后、Fragment 的 onCreateView() 之前调用。在此方法中,您可以分配变量、获取 Intent extras 以及不涉及 View 层次结构的任何其他内容(即非图形初始化)。这是因为这个方法可以在Activity的onCreate()没有完成的时候调用,所以在这里尝试访问View的层次结构可能会导致崩溃。

onCreateView():

在调用 onCreate() 之后(在 Fragment 中),会调用 Fragment 的 onCreateView()。您可以分配视图变量并进行任何图形初始化。您应该从此方法返回一个 View,这是主 UI 视图,但如果您的 Fragment 不使用任何布局或图形,您可以返回 null(如果您不覆盖,则默认情况下发生)。

onActivityCreated():

顾名思义,这是在 Activity 的 onCreate() 完成后调用的。它在 onCreateView() 之后调用,主要用于最终初始化(例如,修改 UI 元素)。

于 2017-03-03T09:32:01.790 回答
0

onCreateView():您可以在此处分配视图变量并进行任何图形初始化。

onActivityCreated():在 onCreateView() 之后调用,主要用于最终的初始化(例如,修改 UI 元素)。

于 2017-03-03T08:54:11.437 回答
0

在onCreateView中,你可能无法使用getActivity.findViewByID()

但是你可以在onActivityCreated 中。

我还建议使用 onView Created()。您也可以在这里使用 getActivity.findViewByID()。

于 2021-09-26T10:43:53.617 回答