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

来源:互联网 发布:sqlserver数据库迁移 编辑:程序博客网 时间:2024/06/06 14:14

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);    }}
0 0
原创粉丝点击