-1

In my app i am using pager adapter to load 2 fragments, the fragments are not getting loaded and view pager remains null. Where i am going wrong? Any help will be appreciated Here is my code I am setting this adapter to my view pager from activity

public class ViewPagerActivityAdapter extends PagerAdapter {
    ArrayList<Fragment> tablist;

    public ViewPagerActivityAdapter(ArrayList<Fragment> tablist) {
        this.tablist = tablist;
    }

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


    @Override
    public boolean isViewFromObject(View view, Object object) {
        return false;
    }

    @Override
    public Object instantiateItem(ViewGroup collection, int position) {

        return null;
    }

    @Override
    public void destroyItem(ViewGroup collection, int position, Object view) {

    }

}

Activity Part

private ViewPagerActivityAdapter viewPagerAdapter;
private ArrayList<Fragment> fragments_faq;

fragments_faq = new ArrayList<>();
FragmentOne frag1 = new FragmentOne();
tablayout.addTab(tablayout.newTab().setText("fragone"));
fragments_faq.add(frag1);
FragmentTwo frag2 = new FragmentTwo();
tablayout.addTab(tablayout.newTab().setText("fragtwo"));
fragments_faq.add(frag2);

private void setPagerAdapter() {
    viewPagerAdapter = new ViewPagerActivityAdapter(fragments_faq);
    viewpager.setAdapter(viewPagerAdapter);
    viewpager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tablayout));
    viewpager.setOffscreenPageLimit(2);
    tablayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewpager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {
        }
    });
}
User
  • 692
  • 2
  • 11
  • 29

4 Answers4

0

@Override

  public Fragment getItem(int position) {

    return this.fragments.get(position);

  }

for details check this gist https://gist.github.com/vinay6kr/33359c3f3b0e9f28e33bd383b01e9d9f

Vinay
  • 732
  • 5
  • 8
0

if you want to show fragments in viewpager you should use FragmentStatePagerAdapter

public class MyViewPagerAdapter extends FragmentStatePagerAdapter {

    CharSequence Titles[];

    public MyViewPagerAdapter(FragmentManager fm, CharSequence mTitles[]) {
        super(fm);
        this.Titles = mTitles;
    }

    @Override
    public Fragment getItem(int position) {
        if (position == 0)
            return new Fragment1().getInstance();
        else if (position == 1)
            return new Fragment2().getInstance();

    }

    @Override
    public CharSequence getPageTitle(int position) {
        return Titles[position];
    }

    @Override
    public int getCount() {
        return Titles.length;
    }
}

and to Set them

 void setUpTabs() {
        String Titles[] = {"Frag1","Frag2"};
        MyViewPagerAdapter adapter = new MyViewPagerAdapter(this.getSupportFragmentManager(), Titles);
        viewPager.setAdapter(adapter);

    }
9spl
  • 357
  • 1
  • 11
0

You can try like adapter look like

      class ViewPagerActivityAdapter extends FragmentPagerAdapter {

      // fragments to instantiate in the viewpager
      private List<Fragment> fragments;

      // constructor
        public ViewPagerActivityAdapter(FragmentManager fm,List<Fragment> fragments) {
       super(fm);
      this.fragments = fragments;
       }

   // return access to fragment from position, required override
    @Override
    public Fragment getItem(int position) {
     return this.fragments.get(position);
   }

   // number of fragments in list, required override
   @Override
   public int getCount() {
    return this.fragments.size();
   }

   }

Add Fragment

List<Fragment> fragments = new Vector<Fragment>();

    fragments.add(Fragment.instantiate(this,
            FragmentOne.class.getName()));
    fragments.add(Fragment.instantiate(this,
            FragmentTwo.class.getName()));

Add to view Pager

ViewPagerActivityAdapter mPagerAdapter;
    this.mPagerAdapter = new ViewPagerActivityAdapter(
            super.getSupportFragmentManager(), fragments);
    mPager = (ViewPager) super.findViewById(R.id.pager);
    mPager.setAdapter(this.mPagerAdapter);
Enamul Haque
  • 4,789
  • 1
  • 37
  • 50
0

You should use FragmentPagerAdapter or FragmentStatePagerAdapter for this.
Here is sample code.

public class ViewPagerActivityAdapter extends FragmentPagerAdapter {
    ArrayList<Fragment> tablist;

    public ViewPagerActivityAdapter(ArrayList<Fragment> tablist) {
        this.tablist = tablist;
    }

    @Override
    public int getCount() {
        return tablist.size();
    }
  @Override
        public Fragment getItem(int position) {
            return tablist.get(position);
        }
}
Ankur Samarya
  • 219
  • 1
  • 3
  • 15