ViewPager与Fragment组合时的基本使用方法
2017-01-22 11:25
453 查看
本篇博客记录一下Android支持库中ViewPager的基本用法。
ViewPager的布局文件类似于下面的实例代码:
ViewPager的使用,类似于前面博客提到的RecyclerView,也是通过自己的Adapter实现视图与数据的绑定。
ViewPager对应的Adapter为PagerAdapter,其实现较为复杂。
不过对于嵌入Fragment的ViewPager而言,Google提供了PagerAdapter的子类FragmentStatePagerAdapter和FragmentPagerAdapter。
这两个子类的使用方式基本一致,我们以FragmentStatePagerAdapter为例,看看使用方式的示例:
从上面的代码可以看出,ViewPager配合FragmentStatePagerAdapter加载Fragment极其的方便。
在了解基本用法后,我们来了解一下ViewPager的注意事项。
1、为了保证页面切换的流畅性及响应速度,ViewPager默认加载当前屏幕以及左右相邻页面列表项的数据。
如果需要限制加载的范围,可以调用ViewPager的setOffscreenPageLimit(int limit)接口。
2、FragmentStatePagerAdapter和FragementPagerAdapter的用法一致,但使用场景不同。
FragmentStatePagerAdapter:
当滑动视图时,FragmentStatePagerAdapter会销毁掉不需要的Fragment。
销毁Fragment的事务提交后,FragmentManager中对应的fragment会被彻底移除。
使用FragmentStatePagerAdapter时,被销毁Fragment可以在自己的onSaveInstanceState函数中保存必要的信息。
当用户切回该Fragment对应界面时,ViewPager会利用保存的信息重新创建Fragment。
FragementPagerAdapter:
对于不再需要的fragment,FragementPagerAdapter选择调用Fragment事务的detach方法而非remove方法。
于是,FragementPagerAdapter仅会销毁fragment的视图,但对应的fragment实例还保留在FragmentManager的队列中。
根据FragmentStatePagerAdapter和FragementPagerAdapter对fragment的处理策略,
我们可以看出FragmentStatePagerAdapter更节省内存。
当ViewPager绑定了大量的数据时,应该使用FragmentStatePagerAdapter;
当ViewPager只需要显示少量固定的fragment时,为了效率,就可以使用FragementPagerAdapter。
3、当ViewPager托管非fragment视图时,就需要实现原生的PageAdapter接口。
下次使用时,再做记录。
ViewPager的布局文件类似于下面的实例代码:
<?xml version="1.0" encoding="utf-8"?> <!--ViewPager来自支持库,因此包名需要全称--> <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_crime_pager_view_pager" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager>
ViewPager的使用,类似于前面博客提到的RecyclerView,也是通过自己的Adapter实现视图与数据的绑定。
ViewPager对应的Adapter为PagerAdapter,其实现较为复杂。
不过对于嵌入Fragment的ViewPager而言,Google提供了PagerAdapter的子类FragmentStatePagerAdapter和FragmentPagerAdapter。
这两个子类的使用方式基本一致,我们以FragmentStatePagerAdapter为例,看看使用方式的示例:
public class CrimePagerActivity extends FragmentActivity { ................ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_crime_pager); mViewPager = (ViewPager) findViewById(R.id.activity_crime_pager_view_pager); //获取ViewPager需要显示的全部数据 mCrimes = CrimeLab.get(this.getApplicationContext()).getCrimes(); //FragmentStatePagerAdapter和FragmentPagerAdapter需要用到FragmentManager FragmentManager fm = getSupportFragmentManager(); mViewPager.setAdapter(new FragmentStatePagerAdapter(fm) { @Override //getItem将获取指定位置的数据,然后创建出Fragment //FragmentStatePagerAdapter将利用到FragmentManager将Fragment添加到Activity中显示 public Fragment getItem(int position) { Crime crime = mCrimes.get(position); return CrimeFragment.newInstance(crime.getId()); } @Override //这个就是得到全部数据的大小 public int getCount() { return mCrimes.size(); } }); UUID crimeId = (UUID) getIntent().getSerializableExtra(EXTRA_CRIME_ID); for (int i = 0; i < mCrimes.size(); ++i) { if (mCrimes.get(i).getId().equals(crimeId)) { //默认情况下,ViewPager启动后,只会显示PagerAdapter中第一个数据对应的视图 //因此,在需要的情况下,可以调用ViewPager的setCurrentItem指定需要显示的列表项 mViewPager.setCurrentItem(i); break; } } } ............ }
从上面的代码可以看出,ViewPager配合FragmentStatePagerAdapter加载Fragment极其的方便。
在了解基本用法后,我们来了解一下ViewPager的注意事项。
1、为了保证页面切换的流畅性及响应速度,ViewPager默认加载当前屏幕以及左右相邻页面列表项的数据。
如果需要限制加载的范围,可以调用ViewPager的setOffscreenPageLimit(int limit)接口。
2、FragmentStatePagerAdapter和FragementPagerAdapter的用法一致,但使用场景不同。
FragmentStatePagerAdapter:
当滑动视图时,FragmentStatePagerAdapter会销毁掉不需要的Fragment。
销毁Fragment的事务提交后,FragmentManager中对应的fragment会被彻底移除。
使用FragmentStatePagerAdapter时,被销毁Fragment可以在自己的onSaveInstanceState函数中保存必要的信息。
当用户切回该Fragment对应界面时,ViewPager会利用保存的信息重新创建Fragment。
FragementPagerAdapter:
对于不再需要的fragment,FragementPagerAdapter选择调用Fragment事务的detach方法而非remove方法。
于是,FragementPagerAdapter仅会销毁fragment的视图,但对应的fragment实例还保留在FragmentManager的队列中。
根据FragmentStatePagerAdapter和FragementPagerAdapter对fragment的处理策略,
我们可以看出FragmentStatePagerAdapter更节省内存。
当ViewPager绑定了大量的数据时,应该使用FragmentStatePagerAdapter;
当ViewPager只需要显示少量固定的fragment时,为了效率,就可以使用FragementPagerAdapter。
3、当ViewPager托管非fragment视图时,就需要实现原生的PageAdapter接口。
下次使用时,再做记录。
相关文章推荐
- ViewPager+Fragment基本使用方法(附源码)
- ViewPager+Fragment基本使用方法(转自网络)
- 转:ViewPager+Fragment基本使用方法(附源码)
- ViewPager+Fragment基本使用方法(附源码)
- ViewPager+Fragment基本使用方法(附源码)
- ViewPager+Fragment基本使用方法
- ViewPager+Fragment基本使用方法(附源码)
- ViewPager+Fragment基本使用方法
- ViewPager、ViewPager和Fragment组合使用的基本用法
- Android中ViewPager+Fragment的基本使用
- ViewPager和Fragment的组合使用
- ViewPager和Fragment的组合使用
- ViewPager和Fragment的组合使用
- ViewPager和Fragment的组合使用
- Android ViewPager基本使用方法
- Android基础:翻页控件Viewpager的使用方法,viewpager+fragment混合使
- 使用viewpager,actionbar,fragment时正确导入android-support-v4.jar的方法
- android 快速开发四、ViewPager+Fragment 组合使用
- ViewPager和Fragment的组合使用
- Android开发ViewPager和Fragment结合使用实现新闻类app基本框架(一)