Search code examples
androidandroid-listfragment

How to call getCount() of fragment list from another class?


I am trying to get the size of the fragment list from another class that extends FragmentStatePagerAdapter but I dont know how to use it. If its an inner class I dont have a problem but then using the adapter as a seperate class I can't get it to work.

This is the mainActivity

public class MainActivity extends AppCompatActivity  {
    public List<Fragment> fragmentList = new ArrayList<>();
    public List<String> tabTitles = new ArrayList<>();
    private TabPagerAdapter pagerAdapter;
    private TabLayout tabLayout;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        fragmentList.add(Fragment1.newInstance());
        fragmentList.add(Fragment2.newInstance());
        fragmentList.add(Fragment3.newInstance());

        tabTitles.add("Tab 1");
        tabTitles.add("Tab 2");
        tabTitles.add("Tab 3");
        // Setup the viewPager
        ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
        pagerAdapter = new TabPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(pagerAdapter);

        // Setup the Tabs
        tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        // This method ensures that tab selection events update the ViewPager and page changes update the selected tab.
        tabLayout.setupWithViewPager(viewPager);

    }

This is the TabPagerAdapter, I want to get the fragmentlist size & position. How can I do it?

public class TabPagerAdapter extends FragmentStatePagerAdapter {

    private MainActivity mMainActivity;

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

    @Override
    public Fragment getItem(int pos) {
      //this code gives error 
       return mMainActivity.fragmentList.get(pos);
    }

    @Override
    public int getCount() {
        //this line gives error
        return mMainActivity.fragmentList.size();
    }

Solution

  • You can pass fragmentList reference in the constructor:

    public class TabPagerAdapter extends FragmentStatePagerAdapter {
    
        private MainActivity mMainActivity;
        private List<Fragment> fragmentList;
    
        public TabPagerAdapter(FragmentManager fm, List<Fragment> fragmentList) {
            super(fm);
            this.fragmentList = fragmentList;
        }
    
        @Override
        public Fragment getItem(int pos) {
           return fragmentList.get(pos);
        }
    
        @Override
        public int getCount() {
            return fragmentList.size();
        }
    }      
    

    Then you create TabPagerAdapter like this:

    pagerAdapter = new TabPagerAdapter(getSupportFragmentManager(), fragmentList);