【问题标题】:Android(Fragment) - Is it recommended to initialize a view object inside onActivityCreated method?Android(Fragment) - 是否建议在 onActivityCreated 方法中初始化视图对象?
【发布时间】:2017-07-23 07:06:02
【问题描述】:

Viewfragment的变量可以这样在onCreateView方法中初始化。这里TextView在fragment里面。

@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里面有一个view是这样初始化的。

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

有什么理由我应该选择onActivityCreated 而不是onCreateView

【问题讨论】:

    标签: android android-fragments fragment-oncreateview


    【解决方案1】:
    textView = (TextView) getActivity().findViewById(R.id.text_view);
    

    这将尝试从您的活动布局中找到 ID 为 R.id.text_view 的视图,而不是您的片段。如果您的片段本身中存在具有该 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;
    }
    

    【讨论】:

      【解决方案2】:

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

      不过,您也可以使用 onAttach。

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

      【讨论】:

      • 我已经编辑了我的问题。实际上,视图不是来自 Activity 而是来自片段。那么,根据您的意见,我应该使用onCreateView 初始化view(这里是textView)吗?
      • 如果它在Fragment中,那么你不应该使用getActivity().findViewById
      【解决方案3】:

      可以参考这个问题了解更多关于onActivityCreated和onCreateViewhere

      onCreate():

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

      onCreateView():

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

      onActivityCreated():

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          但你可以在 onActivityCreated 中。

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

          【讨论】:

            猜你喜欢
            • 2022-08-14
            • 1970-01-01
            • 1970-01-01
            • 2014-01-08
            • 2021-12-14
            • 2010-12-06
            • 2011-05-08
            • 2020-07-12
            • 1970-01-01
            相关资源
            最近更新 更多