
首先,要使用该控件就需要添加design library,在android studio(还没有使用Android studio的小伙伴们要赶紧更换啦)中添加依赖
compile ‘comandroidsupport:design:2220’
然后再布局文件中使用TabLayout
<androidsupportdesignwidgetTabLayout
android:id="@+id/tablayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" />12345
紧接着在下面添加ViewPager
<androidsupportv4viewViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/tablayout" />12345
布局文件完成了,接下来去定义ViewPager中的适配器,这里我使用的是Fragment,所以继承自FragmentPagerAdapter ,代码如下:
public class MyPageAdapter extends FragmentPagerAdapter {
ArrayList<Fragment> datas;
ArrayList<String> titles;
public CommunityPageAdapter(FragmentManager fm) {
super(fm);
}
public void setData(ArrayList<Fragment> datas) {
thisdatas = datas;
}
public void setTitles(ArrayList<String> titles) {
thistitles = titles;
}
@Override
public Fragment getItem(int position) {
return datas == null null : datasget(position);
}
@Override
public int getCount() {
return datas == null 0 : datassize();
}
@Override
public CharSequence getPageTitle(int position) {
return titles == null null : titlesget(position);
}
}12345678910111213141516171819202122232425262728293031
适配器中需要两个数据集合,分配填充Fragment和显示的标题。
然后在需要使用的页面添加如下代码:
MyPageAdapter myPageAdapter = new MyPageAdapter(getFragmentManager());
ArrayList<Fragment> datas = new ArrayList<Fragment>();
datasadd(new AFragment());
datasadd(new BFragment());
datasadd(new CFragment());
myPageAdaptersetData(datas);
ArrayList<String> titles = new ArrayList<String>();
titlesadd("A");
titlesadd("B");
titlesadd("C");
myPageAdaptersetTitles(titles);12345678910111213
现在适配器和数据已经准备好了,那么接下来就是要把数据放入ViewPager中,并使ViewPager和TabLayout相关联:
TabLayout tabLayout = (TabLayout) findViewById(Ridtablayout);
ViewPager viewPager = (ViewPager) findViewById(Ridview_pager);
// 将适配器设置进ViewPager
viewPagersetAdapter(myPageAdapter);
// 将ViewPager与TabLayout相关联
tabLayoutsetupWithViewPager(viewPager);123456
关联之后运行发现,其实ViewPager由于预加载机制,导致每次都会提前加载下一个页面,如果页面的数据量大,那么这将会占用大量的内存,有什么办法可以只加载当前显示的页面呢?
通过查找相关资料发现,有一个方法setOffscreenPageLimit(int),该方法的作用是设置提前加载页面的数量,尝试使用viewPagersetOffscreenPageLimit(0);后发现无效。
继续查阅资料后发现,原来这是由于ViewPager的机制导致的,最少需要预加载一个页面,Requested offscreen page limit 0 too small; defaulting to 1,相关问题链接:>
以上就是关于tablayout+viewpager怎么设置取消滑动全部的内容,包括:tablayout+viewpager怎么设置取消滑动、android的tablayout中icon和字体之间距离怎么设置、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)