ViewPager(2):ViewPager与Fragment一起使用

FragmentPagerAdapter

FragmentPagerAdapter继承自PagerAdapter ,主要用来展示多个Fragment页面,并且每一个Fragment都会被保存在FragmentManager中。 FragmentPagerAdapter最适用于那种少量且相对静态的页面。对于较多的页面集合,更推荐使用FragmentStatePagerAdapter。 FragmentPagerAdapter的派生类只需要实现getItem()getCount()即可。

FragmentStatePagerAdapter

FragmentStatePagerAdapter继承自PagerAdapter,主要使用Fragment来管理每个页面。这个类同样用来保存和恢复fragment页面的状态。 FragmentStatePagerAdapter更多用于大量页面,例如视图列表。当某个页面对用户不再可见时,他们的整个fragment就会被销毁,仅保留fragment状态。相比于FragmentPagerAdapter,这样做的好处是在访问各个页面时能节约大量的内存开销,但代价是在页面切换时会增加非常多的开销。 当使用FragmentStatePagerAdapter的时候对应的ViewPager必须拥有一个有效的ID集。 FragmentStatePagerAdapter的派生类也只需要实现getItem()getCount()即可。

注意:如果要使用FragmentPagerAdapter或FragmentStatePagerAdapter的话,自定义Activity必须继承FragmentActivity。

实例演示

视觉效果:
这里写图片描述
具体实现:
Fragment的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:gravity="center"
        android:text="Page1"
        android:textSize="30sp"/>

</RelativeLayout>

这里只展示一个其它类似。
自定义Fragment

public class Fragment1 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater,
                             @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.page1, null);
    }
}

这里也只展示一个其它类似。
自定义Adapter

public class MyFragmentAdapter extends FragmentPagerAdapter {

    private List<Fragment> fragmentList;

    //需要同时获取FragmentManager和数据
    public MyFragmentAdapter(FragmentManager fm, List<Fragment> fragmentList) {
        super(fm);
        this.fragmentList = fragmentList;
    }

    //获取Item的数据,也就是Fragment
    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    //ViewPager的Item数目
    @Override
    public int getCount() {
        return fragmentList.size();
    }
}

自定义Activity

public class MainActivity extends AppCompatActivity {

    private List<Fragment> fragmentList;

    private ViewPager mViewPager;

    private MyFragmentAdapter myFragmentAdapter;

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

        //准备数据
        Fragment1 mFragment1 = new Fragment1();
        Fragment2 mFragment2 = new Fragment2();
        Fragment3 mFragment3 = new Fragment3();
        Fragment4 mFragment4 = new Fragment4();
        fragmentList = new ArrayList<Fragment>();
        fragmentList.add(mFragment1);
        fragmentList.add(mFragment2);
        fragmentList.add(mFragment3);
        fragmentList.add(mFragment4);

        //获取ViewPager
        mViewPager = (ViewPager) findViewById(R.id.mViewPager);

        //将数据与ViewPager通过适配器连接在一起
        myFragmentAdapter = new MyFragmentAdapter(getSupportFragmentManager(),fragmentList);
        mViewPager.setAdapter(myFragmentAdapter);

    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值