您当前的位置:首页 > 计算机 > 编程开发 > 安卓(android)开发

Tablayout+Fragment+Viewpager实现分页滑动

时间:01-14来源:作者:点击数:
PagerAdapter

PagerAdapter是一个抽象类,它有两个实现子类供我们使用,分别是FragmentStatePagerAdapter和FragmentPagerAdapter

FragmentPagerAdapter,FragmentStatePagerAdapter两者区别

FragmentPagerAdapter在销毁Fragment时不会调用onDestroy()方法,而带了State的Adapter则会调用Fragment的onDestroy()方法,换言之,前者仅仅是销毁了Fragment的View视图而没有销毁Fragment这个对象,但是后者则彻彻底底地消灭了Fragment对象

应用场景

FragmentPagerAdapter适用于Fragment比较少的情况,它会把每一个Fragment保存在内存中,不用每次切换的时候,去保存现场,切换回来在重新创建,所以用户体验比较好。而对于Fragment比较多的情况,需要切换的时候销毁以前的Fragment以释放内存,就可以使用FragmentStatePagerAdapter。

TabLayout+ViewPager+Fragment方法的使用流程:

  •   创建存储多个Fragment实例的列表
    
  •   创建PagerAdapter实例并关联到Viewpager中
    
  •   将ViewPager关联到Tablayout中
    
  •   根据需求改写Tablayout属性*
    
在这里插入图片描述
public class FragmentViewpager extends FragmentPagerAdapter {

    List<Fragment> fragmentList;
    List<String> stringList;

    public FragmentViewpager(@NonNull FragmentManager fm,List<Fragment> fragment,List<String>stringList) {

        super(fm);
        this.fragmentList=fragment;
        this.stringList=stringList;
    }

    @NonNull
    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

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

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return stringList.get(position);
    }
}
public class MainActivity extends AppCompatActivity {

    private ViewPager viewpager;
    private TabLayout tab;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        viewpager = (ViewPager) findViewById(R.id.viewpager);
        tab = (TabLayout) findViewById(R.id.tab);



        ArrayList<Fragment> list = new ArrayList<>();
        list.add(new FragmentOne());
        list.add(new FragmentTwo());
        list.add(new FragmentThree());

        List<String> titles = new ArrayList<>();
        titles.add("推荐");
        titles.add("关注");
        titles.add("附近");


        FragmentViewpager myViewpager = new FragmentViewpager(getSupportFragmentManager(),list,titles);
        viewpager.setAdapter(myViewpager);

        tab.setupWithViewPager(viewpager);


        //翻页监听
        viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

                switch (position){
                    case 0:
                        Toast.makeText(MainActivity.this, "1", Toast.LENGTH_SHORT).show();
                        break;

                    case 1:
                        Toast.makeText(MainActivity.this, "2", Toast.LENGTH_SHORT).show();
                        break;

                    case 2:
                        Toast.makeText(MainActivity.this, "3", Toast.LENGTH_SHORT).show();
                        break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                //state的状态有三个,0表示什么都没做,1正在滑动,2滑动完毕

            }
        });
    }
}
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门