Android Fragment onCreateView - 每次被调用时都会膨胀?

时间:2015-10-09 09:20:33

标签: android fragment

我一直在对我的应用程序进行一些调试,以尝试解决生命周期中发生的事情。

我有一些标签,每个标签内容都是一个不同的片段,每次更改标签时都会在相应的片段中调用onCreateView。

在我的一些onCreateViews中,我正在模拟一些数据并注入表行等,然后每次都给视图充气。如下例所示:

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    Log.d(LOG_TAG, "******************* onCreateView() is being called in the Container Fragment *********************");
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_patient, container, false);
    mTabHost = (FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
    mTabHost.setup(getActivity(), getChildFragmentManager(), android.R.id.tabcontent);

    //Set up tabs
    mTabHost.addTab(mTabHost.newTabSpec("home_addresses").setIndicator("Home Addresses"), HomeAddressesFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("postal_addresses").setIndicator("Postal Addresses"), PostalAddressesFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("temp_addresses").setIndicator("Temporary Addresses"), TemporaryAddressesFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("email_other").setIndicator("Email / Other"), TemporaryAddressesFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("tel_fax").setIndicator("Telephone & Fax"), TemporaryAddressesFragment.class, null);

    //Set to home addresses tab
    mTabHost.setCurrentTab(0);

    tempAddressBtn = (Button)rootView.findViewById(R.id.temp_addr_tab_btn);
    tempAddressBtn.setTransformationMethod(null);
    tempAddressBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tabHandler(v);
        }
    });
    postalAddressBtn = (Button)rootView.findViewById(R.id.postal_addr_tab_btn);
    postalAddressBtn.setTransformationMethod(null);
    postalAddressBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tabHandler(v);
        }
    });
    homeAddressBtn = (Button)rootView.findViewById(R.id.home_addr_tab_btn);
    homeAddressBtn.setTransformationMethod(null);
    homeAddressBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tabHandler(v);
        }
    });
    telFaxBtn = (Button)rootView.findViewById(R.id.tel_fax_tab_btn);
    telFaxBtn.setTransformationMethod(null);
    telFaxBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tabHandler(v);
        }
    });
    emailOtherBtn = (Button)rootView.findViewById(R.id.email_other_tab_btn);
    emailOtherBtn.setTransformationMethod(null);
    emailOtherBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tabHandler(v);
        }
    });


    return rootView;
}

我的问题是,每次调用onCreateView方法时,我应该这样做吗?视图是否已缓存在某处?

我看到教程中的代码看起来有点像:

@Override
protected void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstance);
    setContentView(R.layout.pager_activity);
    if (savedInstance == null) {
        PagerFragment frag = PagerFragment.newInstance(buildPagerData());
        FragmentManager fm = getSupportFragmentManager();
        fm.beginTransaction().add(R.id.layout_fragments, frag, PAGER_TAG).commit();
    }
    findViewById(R.id.btnFragments).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            changeFragmentVisibility();
        }
    });
}

我知道上面这个例子中的Fragment从FragmentActivity扩展而且我只是从Fragment扩展但它正在使用片段管理器并在决定实例化一个新片段之前检查状态是否为null。

编辑:我猜也是因为这种情况发生在onCreate而不是onCreateView上它的发生频率较低?

我想知道这是否是我应该做的事情,或者是否可以按照我的方式继续下去?

1 个答案:

答案 0 :(得分:1)

在我看来,您应该从父Activity管理您的标签。每个Fragment应该负责UI的一部分。

该方法的另一个优点是每个Fragment布局都会更容易一些。如果需要,可以更容易地应用不同的容器(例如ViewPager)。