2016-06-17 9 views
0

Ich versuche, die Größe der Fragmentliste von einer anderen Klasse zu erhalten, die FragmentStatePagerAdapter erweitert, aber ich weiß nicht, wie man es benutzt. Wenn es eine innere Klasse ist, habe ich kein Problem, aber dann den Adapter als eine separate Klasse benutzend, kann ich es nicht zur Arbeit bringen.Wie getCount() der Fragmentliste von einer anderen Klasse aufrufen?

Dies ist der 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); 

    } 

Dies ist TabPagerAdapter, ich möchte die fragmentlist Größe & Position zu bekommen. Wie kann ich es tun?

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(); 
    } 
+0

nie zu einer Aktion um einen Verweis übergeben, wenn es unbedingt notwendig (die fast nie, wenn Sie es nicht als Context-Objekt verwenden) –

+0

Vielen Dank für den Tipp. Ich habs! – choman

Antwort

1

Sie fragmentList Referenz in den Konstruktor übergeben können:

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

Dann erstellen Sie TabPagerAdapter wie folgt aus:

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