1

上午在片段類中使用ViewPager。在那個ViewPager中有三個頁面在每個頁面上顯示自定義列表視圖.ViewPager有些時候顯示列表視圖在一段時間內正確顯示空白頁面。ViewPager in fragment類無法正常工作

片段類ViewPager

public class Schedule extends Fragment{ 

RelativeLayout schedule_lay; 
Schedule_fragment_adapter sfadp; 
ViewPager pager; 
TitlePageIndicator tpi; 
PagerTabStrip pts; 

@Override 
public View onCreateView(LayoutInflater inflater,final ViewGroup container, Bundle savedInstanceState) { 
    if (container == null) { 
     return null; 
    } 

    schedule_lay = (RelativeLayout) inflater.inflate(R.layout.schedule, container, false); 
    pager = (ViewPager) schedule_lay.findViewById(R.id.viewpager); 
    pts = (PagerTabStrip)schedule_lay.findViewById(R.id.page_title_indicator); 
    pts.setDrawFullUnderline(false); 

    pts.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22); 
    pts.setTabIndicatorColor(Color.parseColor("#ff3824")); 

    initialisePaging(); 

    return schedule_lay; 
} 

private void initialisePaging() { 

    List<Fragment> fragments = new Vector<Fragment>(); 
    fragments.add(Fragment.instantiate(getActivity(), Ongoing.class.getName())); 
    fragments.add(Fragment.instantiate(getActivity(), Upcoming.class.getName())); 
    fragments.add(Fragment.instantiate(getActivity(), Recent.class.getName())); 
    this.sfadp = new Schedule_fragment_adapter(super.getActivity().getSupportFragmentManager(), fragments); 

    pager.setAdapter(this.sfadp); 
} 
} 

FragmentPagerAdapter

public class Schedule_fragment_adapter extends FragmentPagerAdapter { 

private final List<Fragment> fragments; 

/** 
* @param fm 
* @param fragments 
*/ 
public Schedule_fragment_adapter(FragmentManager fm, 
     List<Fragment> fragments) { 
    super(fm); 
    this.fragments = fragments; 
} 

@Override 
public Fragment getItem(int position) { 
    return this.fragments.get(position); 
} 

@Override 
public int getCount() { 
    return this.fragments.size(); 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    switch (position) { 
    case 0: 
     return "Ongoing"; 
    case 1: 
     return "Upcoming"; 
    case 2: 
     return "Recent"; 
    } 
    return null; 
} 
} 

定製列表視圖類(我的所有三個自定義列表類像下面類)

public class Ongoing extends Fragment{ 

RelativeLayout ongoing_lay; 
ListView ongoing_matches_lv; 
ArrayList<Item> ongoing_matches = new ArrayList<Item>(); 

@Override 
public View onCreateView(LayoutInflater inflater,final ViewGroup container, Bundle savedInstanceState) { 
    if (container == null) { 
     return null; 
    } 

    ongoing_lay = (RelativeLayout) inflater.inflate(R.layout.ongoing, container, false); 


    return ongoing_lay; 
} 
} 

我無法找到我的問題。可以幫助我解決這個問題。

+0

你嘗試使用列表中的片段? – playmaker420

+0

@ playmaker420編號 – Yugesh

+0

我有一個類似的問題,而從最後一個片段回來時,第一個片段將會去,然後重新加載。我從數據庫中提取數據並填充到列表視圖中。 – playmaker420

回答

8

當你在該行實例化適配器使用的getChildFragmentManager()代替super.getActivity().getSupportFragmentManager()

this.sfadp = new Schedule_fragment_adapter(super.getActivity().getSupportFragmentManager(), fragments); 
+0

謝謝。它工作正常。我有一個懷疑。當我刷這個視圖pager.it有點慢,我可以改善它。 – Yugesh

+0

@Yugesh可以改進佈局(以減少視圖和淺層視圖層次結構),或者檢查在「ViewPager」中使用的片段是否沒有進行過多的初始化。你發佈的代碼中沒有明顯的東西會提示有問題。 – Luksprog