新葡萄娱乐Fragment与ViewPager

旗帜显著,为了促成滑动界面,日常让Fragment与ViewPager一起结合使用,每个ViewPager的页面正是二个Fragment,我们得以在fragment中贯彻增加的机能。
它的骨干用法能够是底下那样

显著,为了促成滑动界面,日常让Fragment与ViewPager一起结合使用,每2个ViewPager的页面正是贰个Fragment,大家得以在fragment中落到实处增加的成效。
它的基本用法可以是下面那样

1、创建一个或者多个你需要的Fragment类,其实就是类似activity一样,也有OnCreate()等回调函数。
fragmentsList = new ArrayList<Fragment>();
Fragment a = new aFragment();
Fragment b = new bFragment();
Fragment c= new cFragment();

fragmentsList.add(a);
fragmentsList.add(b); 
fragmentsList.add(c);

mPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentsList)); 
//注意如果是在Fragment中使用viewPager的话,那么就得使用
//mpager.setAdapter(new MyFragmentPagerAdapter(getChildFragmentManager(),fragmentsList));
mPager.setCurrentItem(0);
mPager.setOnPageChangeListener(new MyOnPageChangeListener());
mPager.setOffscreenPageLimit(3);      // 同时加载3个fragment 
1、创建一个或者多个你需要的Fragment类,其实就是类似activity一样,也有OnCreate()等回调函数。
fragmentsList = new ArrayList<Fragment>();
Fragment a = new aFragment();
Fragment b = new bFragment();
Fragment c= new cFragment();

fragmentsList.add(a);
fragmentsList.add(b); 
fragmentsList.add(c);

mPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentsList)); 
//注意如果是在Fragment中使用viewPager的话,那么就得使用
//mpager.setAdapter(new MyFragmentPagerAdapter(getChildFragmentManager(),fragmentsList));
mPager.setCurrentItem(0);
mPager.setOnPageChangeListener(new MyOnPageChangeListener());
mPager.setOffscreenPageLimit(3);      // 同时加载3个fragment 

 

 

它的适配器:

它的适配器:

import java.util.ArrayList;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {//这里继承的是FragmentPagerAdapter
    private ArrayList<Fragment> fragmentsList;

    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }
    public MyFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragments) {
        super(fm);
        this.fragmentsList = fragments;
    }

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

    @Override
    public Fragment getItem(int arg0) {
        return fragmentsList.get(arg0);
    }

    @Override
    public int getItemPosition(Object object) {
        return super.getItemPosition(object);
    }

     @Override 
     //public boolean isViewFromObject(View view, Object object) { 
     //        return view == object;//官方推荐写法
     //    }
     //事实证明,一旦加上这个方法,fragment的视图便无法显示,原因没去深究

}
import java.util.ArrayList;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {//这里继承的是FragmentPagerAdapter
    private ArrayList<Fragment> fragmentsList;

    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }
    public MyFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragments) {
        super(fm);
        this.fragmentsList = fragments;
    }

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

    @Override
    public Fragment getItem(int arg0) {
        return fragmentsList.get(arg0);
    }

    @Override
    public int getItemPosition(Object object) {
        return super.getItemPosition(object);
    }

     @Override 
     //public boolean isViewFromObject(View view, Object object) { 
     //        return view == object;//官方推荐写法
     //    }
     //事实证明,一旦加上这个方法,fragment的视图便无法显示,原因没去深究

}

上边的适配器继承的是FragmentPagerAdapter,除此之外还足以继承FragmentStatePagerAdapter,可是相互是有分其他。
1.FragmentPagerAdapter继承自PagerAdapter ,首要用来展示多少个Fragment页面,并且每2个Fragment都会被封存在fragment
manager中,最适用于那种少量且相对静态的页面,用户访问过的fragment都会被保存在内部存款和储蓄器中,就算她的视图层级恐怕会在不可知时被销毁。

    

地点的适配器继承的是FragmentPager艾达pter,除此之外还是能够继续FragmentStatePagerAdapter,可是两者是有分其余。
1.FragmentPagerAdapter继承自PagerAdapter ,主要用来呈现多少个Fragment页面,并且每二个Fragment都会被保存在fragment
manager中,最适用于那种少量且相对静态的页面,用户访问过的fragment都会被保存在内存中,即使他的视图层级恐怕会在不可知时被灭绝。

    

2.FragmentStatePagerAdapter继承自PagerAdapter,首要采取Fragment来治本每一个页面。这一个类同样用来保存和死灰复燃fragment页面包车型客车境况,更多用来大气页面,例如视图列表。当有个别页面对用户不再可知时,他们的凡事fragment就会被灭绝,仅保留fragment状态。***比较于FragmentPagerAdapter,那样做的功利是在*访问各种页面时能省去大量的内存花费,但代价是在页面切换时会扩大万分多的开发。**

2.FragmentStatePager艾达pter继承自PagerAdapter,首要采纳Fragment来治本各个页面。那几个类同样用来保存和死灰复燃fragment页面包车型客车气象,更多用于大气页面,例如视图列表。当有个别页面对用户不再可知时,他们的凡事fragment就会被销毁,仅保留fragment状态。***相比之下于FragmentPagerAdapter,那样做的功利是在*访问种种页面时能省去多量的内部存款和储蓄器开支,但代价是在页面切换时会扩充万分多的费用。**

 

 

她俩中间最大的不等在于:用户访问过的页面不可知之后是不是会保留在内部处理于存中。

他俩中间最大的分化在于:用户访问过的页面不可知之后是否会保留在内部处理于存中。

 

 

*大家都通晓:ViewPager为了保险滑动的流畅性,viewpager在加载当前页的时候曾经将pager页左右页的内容加载进内部存款和储蓄器里了(预加运载飞机制)。**当滑动到第n页的时候,adapter会为附近两页创立Fragment实例。*FragmentPagerAdapter和***FragmentStatePagerAdapter在那或多或少是平等的。***

*大家都晓得:ViewPager为了保险滑动的流畅性,viewpager在加载当前页的时候曾经将pager页左右页的内容加载进内部存款和储蓄器里了(预加运载飞机制)。**当滑动到第n页的时候,adapter会为附近两页创造Fragment实例。*FragmentPagerAdapter和***FragmentStatePagerAdapter在那或多或少是一模一样的。***

但是对于上上页:

唯独对于上上页:

*FragmentPagerAdapter的做法:上上页实例保留,可是摧毁它的视图。*

*FragmentPagerAdapter的做法:上上页实例保留,但是摧毁它的视图。*

***FragmentStatePager艾达pter的做法:果断摧毁上上页的实例(我不留情)。***

***FragmentStatePagerAdapter的做法:果断摧毁上上页的实例(笔者不留情)。***

 

 

留意:adapter的getItem()方法是当fragment不存在的时候才被调用,重临的是Fragment的实例。因而对此FragmentPager艾达pter,当每页的Fragment被创建后,那一个函数就不会被调到了。而对此FragmentStatePagerAdapter则不然。

留意:adapter的getItem()方法是当fragment不存在的时候才被调用,重回的是Fragment的实例。由此对此FragmentPagerAdapter,当每页的Fragment被成立后,这一个函数就不会被调到了。而对此FragmentStatePagerAdapter则不然。

 

 

 

 

**卸载不再必要的fragment****

**卸载不再需求的fragment****

**1.FragmentStatePagerAdapter:选用用remove(Fragment)方法将fragment从activity的FragmentManager中彻底移除,在销毁 fragment时,它会将 其 onSaveInstanceState(Bundle)
方法中的Bundle音讯保存下去。用户切换回原来的页面后,保存的实例状
 态可用来苏醒生成新的fragment.**

**1.FragmentStatePagerAdapter:采纳用remove(Fragment)方法将fragment从activity的FragmentManager中根本移除,在销毁 fragment时,它会将 其 onSaveInstanceState(Bundle)
方法中的Bundle新闻保存下来。用户切换回原来的页面后,保存的实例状
 态可用于恢复生成新的fragment.**

 

 

**2.
FragmentPager艾达pter:采纳调用事务的detach(Fragment) 方法,FragmentPagerAdapter只是绝迹了fragment的视 图,但仍将 fragment实例保留在FragmentManager中。由此, FragmentPagerAdapter创造的fragment永远不会被灭绝。**

**2.
FragmentPagerAdapter:选用调用事务的detach(Fragment) 方法,FragmentPagerAdapter只是绝迹了fragment的视 图,但仍将 fragment实例保留在FragmentManager中。因此, FragmentPager艾达pter创设的fragment永远不会被灭绝。**

 

 

**警戒区:
1.ViewPager.getChildCount()
重临的是时下ViewPager所管理的尚未被灭绝视图的Fragment,并不是具备的Fragment。想要获取具有的Fragment数量,应该调用ViewPager.getAdapter().getCount().**

**警戒区:
1.ViewPager.getChildCount()
重回的是时下ViewPager所管理的从未有过被销毁视图的Fragment,并不是颇具的Fragment。想要获取具有的Fragment数量,应该调用ViewPager.getAdapter().getCount().**

**2.主Activity要持续FragmentActivity,唯有FragmentActivity内部才能内嵌Fragment普通Activity是格外的。**

**2.主Activity要继承FragmentActivity,唯有FragmentActivity内部才能内嵌Fragment普通Activity是12分的。**

3.activity和Fragment都要用android.support.v4.app.Fragment,不然或者出现不可能将Fragment的子类转换为Fragment的景况,会抛出转换格外。

3.activity和Fragment都要用android.support.v4.app.Fragment,不然恐怕出现不能将Fragment的子类转换为Fragment的情状,会抛出转换格外。