社区
Android
帖子详情
ViewPager.setOffscreenPageLimit问题
logohoo
2015-05-24 12:36:52
一开始显示图片为12张,所以设置ViewPager.setOffscreenPageLimit(6),可以正常显示;
但是后面图片减少到5张,所以要重新设置ViewPager.setOffscreenPageLimit(5)就出现程序溢出错误,
为什么啊,如何解决啊。如果还是设置ViewPager.setOffscreenPageLimit(6),那么会多出一项,没有显示图片,很难看。
如何解决啊?
...全文
27678
22
打赏
收藏
ViewPager.setOffscreenPageLimit问题
一开始显示图片为12张,所以设置ViewPager.setOffscreenPageLimit(6),可以正常显示; 但是后面图片减少到5张,所以要重新设置ViewPager.setOffscreenPageLimit(5)就出现程序溢出错误, 为什么啊,如何解决啊。如果还是设置ViewPager.setOffscreenPageLimit(6),那么会多出一项,没有显示图片,很难看。 如何解决啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
thankxie0
2016-12-14
打赏
举报
回复
关于ViewPager.setOffscreenPageLimit的理解,可参考博客http://blog.csdn.net/liao277218962/article/details/50675570,博主解说很到位,尤其最后的总结: 例外,若果我们设定mOffscreenPageLimit = 1,则当我们我们滑到第三个页面的时候,第一个页面的视图将被销毁,当我们滑到第一个页面时,第三个页面的视图会被销毁。但滑到第二个页面时,三个界面的视图都不会销毁。 其实这个值指的是,当前view的左右两边的预加载的页面的个数。也就是说,如果这个值mOffscreenPageLimit = 3,那么任何一个页面的左边可以预加载3个页面,右边也可以加载3页面。 因此,你若想开机预加载全部视图,可以ViewPager.setOffscreenPageLimit(mFragments.size()-1),即设置当前view的左右两边的预加载页面个数均为mFragments.size()-1,此时,可保证在程序生命周期内,所有fragment视图都只加载一次,不会重复加载。此时,不管你怎么滑动页面,页面都不会重新创建,所有的控件都可保持用户输入后的状态。
在下个路口
2016-11-01
打赏
举报
回复
你的适配器是继承FragmentPagerAdapter吧,这个在你app完全退出之前fragment都会存在内存里面不会消除的,所以不会刷新。要动态刷新fragmrnt数量要继承FragmentStatePagerAdapter
快乐的程序员hah
2016-10-17
打赏
举报
回复
帮你顶一下,其实这个就是预加载
nice122
2015-07-17
打赏
举报
回复
setOffscreenPageLimit(3)即可 一个左,一个右,还有自己,这样滑动的时候都能动态加载
logohoo
2015-06-13
打赏
举报
回复
再次顶上去,谢谢了。
logohoo
2015-06-09
打赏
举报
回复
再次顶上去,谢谢了。
logohoo
2015-06-08
打赏
举报
回复
再次顶上去,还问题同行们,国内Android开发还是什么问题论坛,谢谢了。
kingbooshoes
2015-06-03
打赏
举报
回复
写错了,应该是这样表达: 他的描述就是正常显示ViewPager,只是一开始加载12页,后来加载6页,但是在加载6页后,前面6页都能正常显示,就是后面6页视图在,只是没有显示图片,不好看,如何消除掉后面6页,只剩前面6页。
kingbooshoes
2015-06-03
打赏
举报
回复
他的描述就是正常显示ViewPager,只是一开始加载12页,后来加载6页,但是在加载6页后,前面6页都能正常显示,就是后面12页视图在,没有显示,不好看,如何消除掉后面6页,只剩前面6页。
logohoo
2015-06-02
打赏
举报
回复
有没有人帮忙回复一下。啊!
山雨楼
2015-06-02
打赏
举报
回复
大哥你的问题还能具体点吗?贴点代码,错误信息什么的
logohoo
2015-05-31
打赏
举报
回复
又是星期天拉,大家辛苦了。有谁帮我一把啊。
kingbooshoes
2015-05-30
打赏
举报
回复
请耐心等待啊,肯定有人懂的,帮你顶。
logohoo
2015-05-29
打赏
举报
回复
继续顶上去,知道的朋友,麻烦了。谢谢!
logohoo
2015-05-29
打赏
举报
回复
有做过的朋友吗?麻烦告知一下,谢谢了。 就是做个动态加载ViewPager、
logohoo
2015-05-29
打赏
举报
回复
我还是不死心啊,继续顶上去。好朋友,帮帮忙拉。
muzi1314_
2015-05-27
打赏
举报
回复
logohoo
2015-05-26
打赏
举报
回复
星期二了,有知道吗?告知一下了,谢谢!
logohoo
2015-05-24
打赏
举报
回复
求助啊,版主在线吗?麻烦一下,说说看,谢谢。星期天大家都没上来吗?
kingbooshoes
2015-05-24
打赏
举报
回复
好同时,帮你顶上去了,希望有人答复你。我也搞不清楚。
加载更多回复(1)
详解Android 在
View
Page
r 中使用 Fragment 的懒加载
我们先看一下效果: 首先,我们要知道什么是懒加载: 懒加载,就是先初始化控件,在用户可见的时候再加载数据。 为什么要懒加载? 懒加载多被使用在新闻资讯类客户端中,试想那么多的分类如果一下子都加载出来,真的是极大地消耗了系统资源。可能有人会说
View
Page
r 有
view
Page
r.
set
Off
screen
Page
Limit
() 的方法,我们传个 0 进去不就好了吗?看过源码的应该知道,即便你传了 0 进去,系统也会默认为 1 的,也就是
View
Page
r 依然会加载当前页面的前后各一个 Fragment 。 我们首先为需要进行懒加载的 Fragment 写一个基类: public a
View
Page
rFragment滑动切换
package com.pyy.
view
page
rfragment; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.
view
.
Page
rAdapter; import android.support.v4.
view
.
View
Page
r; import android.support.v4.
view
.
View
Page
r.On
Page
ChangeListener; import android.
view
.Display; import android.
view
.
View
; import android.
view
.
View
Group; import android.
view
.animation.Animation; import android.
view
.animation.TranslateAnimation; import android.widget.Image
View
; import android.widget.LinearLayout; import android.widget.RelativeLayout; import com.pyy.
view
page
rfragment.R; public class MainActivity extends FragmentActivity { public Main
View
Page
r
view
Page
r; public List
fragments = new ArrayList
(); public String hello = "hello "; private Image
View
mTab1, mTab2, mTab3, mTab4; private Image
View
mTabImg; private int currIndex = 0;// 当前页卡编号 private int zero = 0;// 动画图片偏移量 private int one;//单个水平动画位移 private int two; private int three; private FragmentManager fragmentManager; private int displayWidth, displayHeight; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
set
Content
View
(R.layout.main); Display currDisplay = getWindowManager().getDefaultDisplay();//获取屏幕当前分辨率 displayWidth = currDisplay.getWidth(); displayHeight = currDisplay.getHeight(); one = displayWidth / 4; //设置水平动画平移大小 two = one * 2; three = one * 3; init
View
s();//初始化控件 fragments.add(new TabAFragment()); fragments.add(new TabBFragment()); fragments.add(new TabCFragment()); fragments.add(new TabDFragment()); fragmentManager = this.getSupportFragmentManager();
view
Page
r = (Main
View
Page
r) find
View
ById(R.id.
view
Page
r); //
view
Page
r.
set
Slipping(false);//设置
View
Page
r是否可以滑动
view
Page
r.
set
Off
screen
Page
Limit
(4);
view
Page
r.
set
On
Page
ChangeListener(new MyOn
Page
ChangeListener());
view
Page
r.
set
Adapter(new My
Page
rAdapter()); } /** *@Title: init
View
s *@Description: TODO初始化控件 */ public void init
View
s() { final LinearLayout tab1Layout = (LinearLayout) find
View
ById(R.id.tab1Layout); mTab1 = (Image
View
) find
View
ById(R.id.img_weixin); mTab2 = (Image
View
) find
View
ById(R.id.img_address); mTab3 = (Image
View
) find
View
ById(R.id.img_friends); mTab4 = (Image
View
) find
View
ById(R.id.img_
set
tings); mTabImg = (Image
View
) find
View
ById(R.id.img_tab_now); mTab1.
set
OnClickListener(new MyOnClickListener(0)); mTab2.
set
OnClickListener(new MyOnClickListener(1)); mTab3.
set
OnClickListener(new MyOnClickListener(2)); mTab4.
set
OnClickListener(new MyOnClickListener(3)); //以下是设置移动条的初始位置 RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) mTabImg .getLayoutParams(); int[] location = new int[2]; mTab1.getLocationInWindow(location); int marginLeft = (displayWidth / 4 - 122) / 2;//122是tab下面移动条的宽度 lp.
set
Margins(marginLeft, 0, 0, 0); mTabImg.
set
LayoutParams(lp); mTabImg.
set
Visibility(
View
.VISIBLE); } /** * @ClassName: MyOn
Page
ChangeListener * @Description: TODO页卡切换监听 * @author Panyy * @date 2013 2013年11月6日 下午2:08:10 * */ public class MyOn
Page
ChangeListener implements On
Page
ChangeListener { @Override public void on
Page
Selected(int arg0) { Animation animation = null; switch (arg0) { case 0: mTab1.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_weixin_pressed)); if (currIndex == 1) { animation = new TranslateAnimation(one, 0, 0, 0); mTab2.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_address_normal)); } else if (currIndex == 2) { animation = new TranslateAnimation(two, 0, 0, 0); mTab3.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_find_frd_normal)); } else if (currIndex == 3) { animation = new TranslateAnimation(three, 0, 0, 0); mTab4.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_
set
tings_normal)); } break; case 1: mTab2.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_address_pressed)); if (currIndex == 0) { animation = new TranslateAnimation(zero, one, 0, 0); mTab1.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_weixin_normal)); } else if (currIndex == 2) { animation = new TranslateAnimation(two, one, 0, 0); mTab3.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_find_frd_normal)); } else if (currIndex == 3) { animation = new TranslateAnimation(three, one, 0, 0); mTab4.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_
set
tings_normal)); } break; case 2: mTab3.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_find_frd_pressed)); if (currIndex == 0) { animation = new TranslateAnimation(zero, two, 0, 0); mTab1.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_weixin_normal)); } else if (currIndex == 1) { animation = new TranslateAnimation(one, two, 0, 0); mTab2.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_address_normal)); } else if (currIndex == 3) { animation = new TranslateAnimation(three, two, 0, 0); mTab4.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_
set
tings_normal)); } break; case 3: mTab4.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_
set
tings_pressed)); if (currIndex == 0) { animation = new TranslateAnimation(zero, three, 0, 0); mTab1.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_weixin_normal)); } else if (currIndex == 1) { animation = new TranslateAnimation(one, three, 0, 0); mTab2.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_address_normal)); } else if (currIndex == 2) { animation = new TranslateAnimation(two, three, 0, 0); mTab3.
set
ImageDrawable(getResources().getDrawable( R.drawable.tab_find_frd_normal)); } break; } currIndex = arg0; animation.
set
FillAfter(true);// True:图片停在动画结束位置 animation.
set
Duration(150); mTabImg.startAnimation(animation); } @Override public void on
Page
Scrolled(int arg0, float arg1, int arg2) { } @Override public void on
Page
ScrollStateChanged(int arg0) { } } /** * @ClassName: MyOnClickListener * @Description: TODO头标点击监听 * @author Panyy * @date 2013 2013年11月6日 下午2:46:08 * */ private class MyOnClickListener implements
View
.OnClickListener { private int index = 0; public MyOnClickListener(int i) { index = i; } @Override public void onClick(
View
v) {
view
Page
r.
set
CurrentItem(index); } }; /** * @ClassName: My
Page
rAdapter * @Description: TODO填充
View
Page
r的数据适配器 * @author Panyy * @date 2013 2013年11月6日 下午2:37:47 * */ private class My
Page
rAdapter extends
Page
rAdapter { @Override public boolean is
View
FromObject(
View
arg0, Object arg1) { return arg0 == arg1; } @Override public int getCount() { return fragments.size(); } @Override public void destroyItem(
View
container, int position, Object object) { ((
View
Page
r) container).remove
View
(fragments.get(position) .get
View
()); } @Override public Object instantiateItem(
View
Group container, int position) { Fragment fragment = fragments.get(position); if (!fragment.isAdded()) { // 如果fragment还没有added FragmentTransaction ft = fragmentManager.beginTransaction(); ft.add(fragment, fragment.getClass().getSimpleName()); ft.commit(); /** * 在用FragmentTransaction.commit()方法提交FragmentTransaction对象后 * 会在进程的主线程中,用异步的方式来执行。 * 如果想要立即执行这个等待中的操作,就要调用这个方法(只能在主线程中调用)。 * 要注意的是,所有的回调和相关的行为都会在这个调用中被执行完成,因此要仔细确认这个方法的调用位置。 */ fragmentManager.executePendingTransactions(); } if (fragment.get
View
().getParent() == null) { container.add
View
(fragment.get
View
()); // 为
view
page
r增加布局 } return fragment.get
View
(); } }; }
androidfaqs:例程 TrickConfigurationSnippets 的总结
安卓常见
问题
常规技巧/配置/片段的总结 如何避免
View
Page
r破坏Fragment视图? 改变他可以容纳多少视图的偏移量(阈值)实例化的
View
Page
r.
set
Off
screen
Page
Limit
(3) 如何使MultiAutoCompleteText
View
使用逗号以外的其他字符进行标记? 写的东西像,所以你可以简单地通过desireable字符符号化了的构造。 我怎样才能让我的 Activity 在方向事件上不丢失小部件的状态? 在您的AndroidManifest文件查找中包含相应的活动标签,并将android:configChanges="orientation|
screen
Size"到其中。 现在您的活动标签将类似于<activity name= ".YourActivity" android:configChanges="orientation|
screen
S
自定义无缓存的
view
Page
r
View
page
r
set
Off
screen
Page
Limit
(0) 无效 至少会缓存一页 使用此
view
page
代替原生 的 之后设置
set
Off
screen
Page
Limit
(0) 可不缓存
View
Page
r android-pre-support-v4取消预加载jar包
该jar包是基于android 的android-support-v4jar 上对
View
Page
r进行了小小的改动,因为android原有的android-support-v4.jar里面的
View
Page
r是不能通过
set
Off
screen
Page
Limit
(0)取消预加载的,所以要想取消
View
Page
r的预加载,还需要对源码进行修改,而以上jar包,就针对这种情况在源码的基础上进行了修改,再结合
View
Page
r中的
set
Off
screen
Page
Limit
(0)方法,即可取消
View
Page
r的预加载.
Android
80,349
社区成员
91,287
社区内容
发帖
与我相关
我的任务
Android
移动平台 Android
复制链接
扫一扫
分享
社区描述
移动平台 Android
android
android-studio
androidx
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章