Android ViewPager内部碎片仅加载一次

时间:2014-09-23 01:38:48

标签: android android-fragments android-viewpager

我遇到了ViewPager的问题。我正在使用FragmentActivity,我在FragmentActivity中添加了多个片段,如下所示。

public void addFragment(Fragment fragment, boolean addToBackStack, int transition) {
        FragmentTransaction ft = getFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_up,R.anim.slide_down,R.anim.slide_up,R.anim.slide_down);
        ft.replace(R.id.main, fragment);
        ft.setTransition(transition);
        if (addToBackStack)
            ft.addToBackStack(null);
        ft.commit();

} 

我在片段中使用ViewPager。加载FragmentActivity时,ViewPager工作正常。但是当我使用另一个片段时,ViewPager变得不可见。

例如

a。)片段A 与ViewPager

b。)片段B 没有ViewPager

运行App时,

片段A 正常工作。当我去片段B 然后我再次将片段B替换为片段A然后ViewPager不起作用。我看到我使用ViewPager的空白视图。

请告诉我如何解决此问题

由于

2 个答案:

答案 0 :(得分:7)

我自己解决了问题,当您使用片段内的ViewPager使用getChildFragmentManager()代替getSupportFragmentManager()getFragmentManager()时。

就是这样。

答案 1 :(得分:0)

我无法评论所以我会在这里写一个答案。

为什么不将viewpager作为片段放置:

public class ViewPager extends Fragment{
public static final String TAG = ViewPager.class.getSimpleName();
private ViewPagerAdapter mAdapter;

public static ViewPager newinstance(){
    ViewPager  viewPager = new ViewPager();
    return viewPager ;
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.view_pager, container, false);

    ViewPager viewPager = (ViewPager) view.findViewById(R.id.pager);
    mAdapter = new ViewPagerAdapter(getChildFragmentManager());
    viewPager.setAdapter(mAdapter); 
    return view;
}

}

在适配器中:

public class ViewPagerAdapter extends FragmentPagerAdapter{

public ViewPagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int arg0) {
    return Fragment.newinstance();
}

@Override
public int getCount() {
    return 5; //number of pages on your viewPager
}

然后在您的主要活动中,您可以使交易添加视图寻呼机

    ViewPager viewPager = ViewPager.newInstance();
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.add(R.id.content_frame,viewPager);
    ft.addToBackStack(ViewPager.TAG);
    ft.commit();