@by moses fragment在viewpager中的使用注意项:
一、在普通activity 的布局中使用fragment ,
开启事务后,
判断fragment是否为空,如果为空则向事务中添加该fragment,
如果不为空,则使用事务.show(该fragment)。
二、在viewpager中使用fragment: 使用FragmentPagerAdapter
因为fragment需要提前加入到adapter的数据源,因此在每次开启事务后不再添加fragment,
而是直接使用事务.show()显示该fragment。
三、 : 一、二为参考,有待进一步学习
因为在适配器FragmentPagerAdapter 的getItem() 中返回了Fragment,也即已经将fragment实例添加,所以在
处理viewpager的监听事件时,不应在开启事务对fragment进行操作。
【【特别值得记住的是:
①Activity第一次开启式,Activity的onCreate()会在onAttachFragment()前执行,也就是说,
只有在new了Fragment的实例以后,才会在Fragment类中回调onAttach(),让后返回到Activity中回调
onAttachFragment()。
②在切换屏幕时,Activity会被销毁重建,与①中不同的是:会最先由Fragment回调其onAttach(),
然后返回到Activity中回调onAttachFragment(),然后才会回调Activity中的onCreate();
③综上: 在屏幕切换时,为了保持界面的延续性,需要非常注意Activity和Fragment声明周期回调方法的原理和机制。
**这样操作:
A、构造两个List<Fragment>对象,mFragments和mAttachFragments。前者作为适配器的数据源,后者作为接收
通过onAttachFragment()返回得到的Fragment对象(会根据数据量反复调用)。
B、在第一次(每一次)进入Activity时,使用new关键字获得Fragment实例,添加数据源mFragments到并刷新适配器;
【理解】:判断条件 if(mAttachFragments.size() == 0){
//即没有通过onAttachFragment()获得任何数据,也就是每次进入Activity的状况,
//这时候就采取new的方式。
}else{
//即通过onAttachFragment()获得了数据,也就是不是第一次进入Activity,那么就
//应该是属于切换屏幕的情况。 【这个时候就不是使用new获得Fragment对象了,
//这是先清空数据源mFragments,然后把从onAttachFragment()获得的数据,也就是
//mAttachFragments中的数据放到已经清空的mFragments,然后刷新适配器即可。】
};
C、在执行上面步骤的同时或之前,在onAttachFragment()中需要将获得的Fragment对象添加到mAttachFragments中。
】】
email: donmoses1989@gmail.com
一、在普通activity 的布局中使用fragment ,
开启事务后,
判断fragment是否为空,如果为空则向事务中添加该fragment,
如果不为空,则使用事务.show(该fragment)。
二、在viewpager中使用fragment: 使用FragmentPagerAdapter
因为fragment需要提前加入到adapter的数据源,因此在每次开启事务后不再添加fragment,
而是直接使用事务.show()显示该fragment。
三、 : 一、二为参考,有待进一步学习
因为在适配器FragmentPagerAdapter 的getItem() 中返回了Fragment,也即已经将fragment实例添加,所以在
处理viewpager的监听事件时,不应在开启事务对fragment进行操作。
【【特别值得记住的是:
①Activity第一次开启式,Activity的onCreate()会在onAttachFragment()前执行,也就是说,
只有在new了Fragment的实例以后,才会在Fragment类中回调onAttach(),让后返回到Activity中回调
onAttachFragment()。
②在切换屏幕时,Activity会被销毁重建,与①中不同的是:会最先由Fragment回调其onAttach(),
然后返回到Activity中回调onAttachFragment(),然后才会回调Activity中的onCreate();
③综上: 在屏幕切换时,为了保持界面的延续性,需要非常注意Activity和Fragment声明周期回调方法的原理和机制。
**这样操作:
A、构造两个List<Fragment>对象,mFragments和mAttachFragments。前者作为适配器的数据源,后者作为接收
通过onAttachFragment()返回得到的Fragment对象(会根据数据量反复调用)。
B、在第一次(每一次)进入Activity时,使用new关键字获得Fragment实例,添加数据源mFragments到并刷新适配器;
【理解】:判断条件 if(mAttachFragments.size() == 0){
//即没有通过onAttachFragment()获得任何数据,也就是每次进入Activity的状况,
//这时候就采取new的方式。
}else{
//即通过onAttachFragment()获得了数据,也就是不是第一次进入Activity,那么就
//应该是属于切换屏幕的情况。 【这个时候就不是使用new获得Fragment对象了,
//这是先清空数据源mFragments,然后把从onAttachFragment()获得的数据,也就是
//mAttachFragments中的数据放到已经清空的mFragments,然后刷新适配器即可。】
};
C、在执行上面步骤的同时或之前,在onAttachFragment()中需要将获得的Fragment对象添加到mAttachFragments中。
】】