2015-10-09 27 views
0

我一直在對我的應用程序進行一些調試,試圖弄清楚生命週期中發生了什麼。Android碎片onCreateView - 每次調用它時都會膨脹?

我有一些選項卡,每個選項卡內容是不同的片段,每次更改選項卡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(); 
     } 
    }); 
} 

我在上面從FragmentActivity延伸,礦井剛剛從片段延伸,但它使用的是分段管理器和檢查是否例如知道這個片段在決定實例化新片段之前,狀態爲空。

編輯:我也猜測,因爲這發生在onCreate而不是onCreateView它發生較少?

我想知道如果這是我應該做的事情,或者如果它可以繼續我的方式?

回答

1

在我看來,你應該從父母Activity管理你的標籤。每個Fragment應該負責UI的一部分。

該方法的另一個優點是每個Fragment佈局會更容易一些。如果需要,應用不同的容器會更容易(例如ViewPager)。

+0

這個片段有一組水平製表符嗎?那麼還應該從父級活動管理這組選項卡?父活動片段確實管理垂直標籤,這在那裏似乎合乎邏輯。 – berimbolo

+0

你說的是你的視圖中有兩組水平製表符? – aldorain

+0

不,我有一組垂直製表符,每個製表符顯示一個適合於製表符的片段。在第一個標籤上,其內容包含一組水平標籤。我粘貼到我的示例中的代碼是用於片段中包含的水平製表符。 – berimbolo