1. 程式人生 > >TabLayout和viewpager繫結的兩種方式

TabLayout和viewpager繫結的兩種方式

兩種方法的區別是tab的文字放在哪裡,一種是在Activity中一種是在是配置中;
先第一種在Activity中:

//把需要用的Fragment放到一個集合中
List<Fragment> list=new ArrayList<>();
        list.add(new Frag1());
        list.add(new Frag2());
//介面卡
MyAdpater adpater = new MyAdpater(getSupportFragmentManager());
        adpater.setData(list);
        page.setAdapter(adpater);
 //一個樣式
tab.setTabMode(TabLayout.MODE_FIXED);
//TabLayout與viewpager聯動的程式碼
tab.setupWithViewPager(page);
//需要幾個頁面new幾個
tab.addTab(tab.newTab());
tab.addTab(tab.newTab());
//把需要的文字寫在裡面,也是要先開啟
tab.getTabAt(0).setText("1");
tab.getTabAt(1).setText("2");

介面卡

private List<Fragment> list;

    public MyAdpater(FragmentManager supportFragmentManager) {
        super(supportFragmentManager);

        this.list=new ArrayList<>();
    }

    public void setData(List<Fragment> list) {
        //這裡一定要用this.否則會報空指標
        this.list.clear();   
        this.list.addAll(list);
        notifyDataSetChanged();
    }
    @Override
    public Fragment getItem(int i) {
        return list.get(i);
    }

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

第二種方法是在介面卡中寫字

//把frag和需要的文字放進集合
ArrayList<Fragment> list = new ArrayList<>();
        list.add(new FragA());
        list.add(new FragB());
        ArrayList<String> list_s = new ArrayList<>();
        list_s.add("熱門");
        list_s.add("熱門");
PageAd ad = new PageAd(getSupportFragmentManager());
//把兩個集合都放進介面卡
ad.setData(list,list_s);

tab.setTabMode(TabLayout.MODE_FIXED);
 page.setAdapter(ad);
tab.setupWithViewPager(page);
tab.addTab(tab.newTab());
tab.addTab(tab.newTab());

以下是介面卡

private ArrayList<Fragment> list;
    private ArrayList<String> list_s;

    public PageAd(FragmentManager supportFragmentManager) {
        super(supportFragmentManager);
        this.list=new ArrayList<>();

    }
    public void setData(ArrayList<Fragment> list,ArrayList<String> list_s) {
        this.list=list;
        this.list_s=list_s;
    }


    @Override
    public Fragment getItem(int i) {
        return list.get(i);
    }

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

//注意要把這個方法打出來把集合裡的字給到
    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return list_s.get(position);
    }