我有一個TabsPagerAdapter類延伸FragmentPagerAdapter。我用它來填充3個選項卡。所有三個視圖都是碎片。片段onCreateView不叫
這是它們是如何定義的
public class DonorSearchFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
}
}
public class DonorResultsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
}
}
public class CampDonorResultsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
}
}
這些片段(如標籤)從TabsPagerAdapter實例如下面
public class TabsPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> fragments;
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
fragments = new ArrayList<Fragment>();
fragments.add(Constants.SEARCH_TAB_POSITION, new DonorSearchFragment());
fragments.add(Constants.DONORS_TAB_POSITION, new DonorResultsFragment());
fragments.add(Constants.CAMP_DONORS_TAB_POSITION, new CampDonorResultsFragment());
}
...
}
和在MainActivity,我實例化TabsPagerAdapter類類如上所示
public class MainActivity extends ActionBarActivity implements ActionBar.TabListener, DonorSearchFragment.ResultsChangedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
tabsPagerAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(tabsPagerAdapter);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name).setTabListener(this));
}
..
}
}
令人驚訝的是,即使在如上所述的實例化之後,第三個選項卡(即CampDonorResultsFragment)onCreateView()也沒有被調用。因此,如果我調用該片段上的任何方法,則所有變量(在onCreateView())中實例化爲空,並且我得到空指針異常。
這裏發生了什麼,爲什麼onCreateView()沒有被手動調用該片段上的任何方法之前調用。另外,爲什麼在上面的第二個選項卡(DonorResultsFragment)上不會發生這種情況。
完全發佈'TabsPagerAdapter'! – mmlooloo 2014-09-30 05:32:10