Android ViewPager Inside Fragment Loaded Only Once

£可爱£侵袭症+ 提交于 2019-12-24 05:37:04

问题


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


回答1:


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.




回答2:


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


来源:https://stackoverflow.com/questions/25985576/android-viewpager-inside-fragment-loaded-only-once

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!