android 中怎么关掉viewpage的滑动效果

2025-04-12 02:02:54
推荐回答(1个)
回答1:

首先,要使用该控件就需要添加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它就能自动根据标题的数量,滑动展示啦,功能到这里就完美实现了!