2

I am getting issue with ViewPager. I am using FragmentActivity and I added the multiple fragment inside FragmentActivity as following method.

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();

} 

I am using ViewPager Inside the fragment. ViewPager is working fine when FragmentActivity loaded. but when i use another fragment ViewPager got invisible.

for example

a.) Fragment A with ViewPager

b.) Fragment B without ViewPager

Fragment A working fine when I run App. when i go to Fragment B then I again i replace Fragment B to Fragment A then ViewPager is not working. I see the blank view where I am using ViewPager.

Please let me know How can i solve this issue

Thanks

Munish Kapoor
  • 3,141
  • 2
  • 26
  • 41
  • Check http://stackoverflow.com/questions/19485848/how-load-fragment-in-viewpager-only-when-its-selected Hope it helps :) – Srikanth P Feb 06 '15 at 07:21
  • Check http://stackoverflow.com/questions/19485848/how-load-fragment-in-viewpager-only-when-its-selected Hope it solves ur issue :) – Srikanth P Feb 06 '15 at 07:23

2 Answers2

9

I solved it myself the issue was when you use the ViewPager inside the fragment use getChildFragmentManager() instead of getSupportFragmentManager() or getFragmentManager().

That's it.

Reaz Murshed
  • 23,691
  • 13
  • 78
  • 98
Munish Kapoor
  • 3,141
  • 2
  • 26
  • 41
0

I cannot comment so I'm going to write an answer here.

Why you don't just put the viewpager as a fragment:

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;
}

}

In your adapter:

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
}

Then on your main activity you can make the transaction to add the view pager

    ViewPager viewPager = ViewPager.newInstance();
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.add(R.id.content_frame,viewPager);
    ft.addToBackStack(ViewPager.TAG);
    ft.commit();
César Cobo
  • 598
  • 5
  • 9