2016-06-17 9 views
0

私はFragmentStatePagerAdapterを拡張する別のクラスからフラグメントリストのサイズを取得しようとしていますが、使用方法はわかりません。そのクラスの内部クラスには問題はありませんが、アダプタを別のクラスとして使用すると、動作させることができません。別のクラスからフラグメントリストのgetCount()を呼び出す方法は?

これはこれはTabPagerAdapterある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); 

    } 

ですが、私はfragmentlistサイズに&位置を取得したいです。どうしたらいいですか?

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

を絶対に必要な場合を除き活動への参照の周りに渡すことはありません(ありますContextオブジェクトとして使用しない限りほとんど決してありません) –

+0

このチップをありがとうございます。とった! – choman

答えて

1

あなたは、コンストラクタでfragmentList参照渡すことができます。そして、あなたがこのようなTabPagerAdapter作成

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

を:

pagerAdapter = new TabPagerAdapter(getSupportFragmentManager(), fragmentList); 
関連する問題