viewpage 去掉左右切换效果_如何禁止viewPage左右滑动的效果

2016-11-09 回答

首先,要使用该控件就需要添加designlibrary,在androidstudio(还没有使用androidstudio的小伙伴们要赶紧更换啦)中添加依赖compile‘com.android.support:design:22.2.0’然后再布局文件中使用tablayout12345紧接着在下面添加viewpager12345布局文件完成了,接下来去定义viewpager中的适配器,这里我使用的是fragment,所以继承自fragmentpageradapter,代码如下:publicclassmypageadapterextendsfragmentpageradapter{arraylistdatas;arraylisttitles;publiccommunitypageadapter(fragmentmanagerfm){super(fm);}publicvoidsetdata(arraylistdatas){this.datas=datas;}publicvoidsettitles(arraylisttitles){this.titles=titles;}@overridepublicfragmentgetitem(intposition){returndatas==null?null:datas.get(position);}@overridepublicintgetcount(){returndatas==null?0:datas.size();}@overridepubliccharsequencegetpagetitle(intposition){returntitles==null?null:titles.get(position);}}12345678910111213141516171819202122232425262728293031适配器中需要两个数据集合,分配填充fragment和显示的标题。然后在需要使用的页面添加如下代码:mypageadaptermypageadapter=newmypageadapter(getfragmentmanager());arraylistdatas=newarraylist();datas.add(newafragment());datas.add(newbfragment());datas.add(newcfragment());mypageadapter.setdata(datas);arraylisttitles=newarraylist();titles.add("a");titles.add("b");titles.add("c");mypageadapter.settitles(titles);12345678910111213现在适配器和数据已经准备好了,那么接下来就是要把数据放入viewpager中,并使viewpager和tablayout相关联:tablayouttablayout=(tablayout)findviewbyid(r.id.tablayout);viewpagerviewpager=(viewpager)findviewbyid(r.id.view_pager);//将适配器设置进viewpagerviewpager.setadapter(mypageadapter);//将viewpager与tablayout相关联tablayout.setupwithviewpager(viewpager);123456关联之后运行发现,其实viewpager由于预加载机制,导致每次都会提前加载下一个页面,如果页面的数据量大,那么这将会占用大量的内存,有什么法可以只加载当前显示的页面呢看通过查找相关资料发现,有一个方法setoffscreenpagelimit(int),该方法的作用是设置提前加载页面的数量,尝试使用viewpager.setoffscreenpagelimit(0);后发现无效。继续查阅资料后发现,原来这是由于viewpager的机制导致的,最少需要预加载一个页面,requestedoffscreenpagelimit0toosmall;defaultingto1,相关问题链接:发现了可以完美解决该问题的方法:在fragment中有一个方法,setuservisiblehint,该方法可以获取当前页面的展示情况@overridepublicvoidsetuservisiblehint(booleanisvisibletouser){super.setuservisiblehint(isvisibletouser);if(isvisibletouser){//页面正在展示,在这里加载你的数据}else{//页面没有展示}}12345678910基本到这一步功能已经实现了,但是,还有一些细节需要注意,到底viewpager滑动的时候为什么会造成tablayout的标题也随之更换呢看原来setupwithviewpager被调用的时候,执行了下面的代码viewpager.addonpagechangelistener(newtablayout.tablayoutonpagechangelistener(this));this.setontabselectedlistener(newtablayout.viewpagerontabselectedlistener(viewpager));到最后,还有一个问题,那么就是如果我们的标题有多条,导致超出了tablayout的显示范围,这该如何解决呢看很简单,查阅官方api发现,tablayout有一个方法是settabmode,它是用来设置tablayout的展示模式,而这个方法接受两个常量,mode_scrollable以及mode_fixed,显而易见,当我们设置为mode_scrollable它就能自动根据标题的数量,滑动展示啦,功能到这里就完美实现了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值