Android——FragmentPagerAdapter和FragmentStatePagerAdapter的使用...
2017-02-20 00:40
393 查看
FragmentPagerAdapter相比之前的PagerAdapter,并不是需要得到4个view对象,而是通过4个Fragment类来对应4个布局文
件。
FragmentPagerAdapter 继承自 PagerAdapter。相比通用的 PagerAdapter,该类更专注于每一页均为 Fragment 的情况。
该类内的每一个生成的 Fragment 都将保存在内存之中,注意是全部的Fragment,因此适用于那些相对静态的页,数量也比较少
的那种;如果需要处理有很多页,并且数据动态性较大、占用内存较多的情况,应该使用FragmentStatePagerAdapter。
先来看FragmentPagerAdapter:
在上一个项目中需要改几项:
1、创建4个Fragment,加载对应的布局view。
2、在Mainactivity中添加Fragment容器list。
3、创建适配器MyFragmentPagerAdapter:
4、加载适配器
FragmentStatePagerAdapter,该 PagerAdapter 的实现将只保留当前页面,当页面离开视线后,就会被消除,释放其资源;而
在页面需要显示时,生成新的页面(就像 ListView 的实现一样)。这么实现的好处就是当拥有大量的页面时,不必在内存中占用大
量的内存。
只需要替换下代码即可验证:
FragmentStatePagerAdapter:
我们在第四个Fragment类中添加destroy方法,销毁时log打印一下:
返回第二个页面,第四个已经被销毁。
创建FragmentStatePagerAdapter类:
件。
FragmentPagerAdapter 继承自 PagerAdapter。相比通用的 PagerAdapter,该类更专注于每一页均为 Fragment 的情况。
该类内的每一个生成的 Fragment 都将保存在内存之中,注意是全部的Fragment,因此适用于那些相对静态的页,数量也比较少
的那种;如果需要处理有很多页,并且数据动态性较大、占用内存较多的情况,应该使用FragmentStatePagerAdapter。
先来看FragmentPagerAdapter:
在上一个项目中需要改几项:
1、创建4个Fragment,加载对应的布局view。
public class Fragment1 extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.view1, container, false); } }
2、在Mainactivity中添加Fragment容器list。
private List<Fragment> fraglist;//上面声明 fraglist=new ArrayList<Fragment>(); fraglist.add(new Fragment1()); fraglist.add(new Fragment2()); fraglist.add(new Fragment3()); fraglist.add(new Fragment4());
3、创建适配器MyFragmentPagerAdapter:
package com.example.viewpagertest; import java.util.List; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; public class MyFragmentPagerAdapter extends FragmentPagerAdapter { private List<Fragment> fraglist; private List<String> tablist; public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> fraglist, List<String> tablist) { super(fm); // TODO Auto-generated constructor stub this.fraglist = fraglist; this.tablist = tablist; } @Override public Fragment getItem(int arg0) { // TODO Auto-generated method stub return fraglist.get(arg0); } @Override public CharSequence getPageTitle(int position) { // TODO Auto-generated method stub return tablist.get(position); } @Override public int getCount() { // TODO Auto-generated method stub return fraglist.size(); } }
4、加载适配器
// 创建FragmentPagerAdapter MyFragmentPagerAdapter adapter1=new MyFragmentPagerAdapter(getSupportFragmentManager(), fraglist, tablist); pager.setAdapter(adapter1);
FragmentStatePagerAdapter,该 PagerAdapter 的实现将只保留当前页面,当页面离开视线后,就会被消除,释放其资源;而
在页面需要显示时,生成新的页面(就像 ListView 的实现一样)。这么实现的好处就是当拥有大量的页面时,不必在内存中占用大
量的内存。
只需要替换下代码即可验证:
FragmentStatePagerAdapter:
package com.example.viewpagertest; import java.util.List; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentStatePagerAdapter; import android.view.ViewGroup; public class MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter{ private List<Fragment> fraglist; private List<String> tablist; public MyFragmentStatePagerAdapter(FragmentManager fm,List<Fragment> fraglist,List<String> tablist) { super(fm); // TODO Auto-generated constructor stub this.fraglist=fraglist; this.tablist=tablist; } @Override public Fragment getItem(int arg0) { // TODO Auto-generated method stub return fraglist.get(arg0); } @Override public CharSequence getPageTitle(int position) { // TODO Auto-generated method stub return tablist.get(position); } @Override public int getCount() { // TODO Auto-generated method stub re b5a4 turn fraglist.size(); } //创建 @Override public Object instantiateItem(ViewGroup arg0, int arg1) { // TODO Auto-generated method stub return super.instantiateItem(arg0, arg1); } //销毁 @Override public void destroyItem(ViewGroup container, int position, Object object) { // TODO Auto-generated method stub super.destroyItem(container, position, object); } }
我们在第四个Fragment类中添加destroy方法,销毁时log打印一下:
package com.example.viewpagertest; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment4 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.view4, container, false); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.i("lpl", "我被销毁了"); } }
返回第二个页面,第四个已经被销毁。
创建FragmentStatePagerAdapter类:
// 创建FragmentStatePagerAdapter MyFragmentStatePagerAdapter adapter2=new MyFragmentStatePagerAdapter(getSupportFragmentManager(), fraglist, tablist); pager.setAdapter(adapter2);
相关文章推荐
- 【Android】FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别
- 【Android界面实现】FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别
- 【Android界面实现】FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别
- [转][Android]FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别
- Android中FragmentPagerAdapter与FragmentStatePagerAdapter使用和区别
- android ViewPager学习(四)FragmentStatePagerAdapter viewpager内fragment的替换
- android 解决FragmentStatePagerAdapter 刷新无效问题
- Android——ViewPager、PagerAdapter、Fragment(State)PagerAdapter的关系与区别
- Android-- FragmentStatePagerAdapter与FragmentPagerAdapter分页
- FragmentStatePagerAdapter的使用
- android fragmentStateViewPagerAdapter 介绍
- 55 Android Fragment_ViewPager 适配器 FragmentStatePagerAdapter
- Android FragmentStatePagerAdapter
- Android-- FragmentStatePagerAdapter(分页)
- FragmentPagerAdapter与FragmentStatePagerAdapter具体使用场景
- Android中ViewPager使用FragmentPagerAdapter(底部圆点)
- Android中FragmentStatePagerAdapter ,FragmentPagerAdapter
- Android FragmentStatePagerAdapter Example
- Android修炼之道—FragmentStatePagerAdapter和FragmentPagerAdapter
- FragmentPagerAdapter与FragmentStatePagerAdapter使用区别