“效果展示:
效果:顶部有书签Tablayout,点击书签或滑动Fragment,
通过ViewPager可以切换UI界面。比如网易新闻。
实现书签导航思路:
Fragment + ViewPager + TabLayout(5.0新技术)
1.有多少个书签,就创建多少个Fragment。
2.初始化数据: 找出Fagment的对象,存进集合。
3.适配数据:创建一个类,继承FragmentPagerAdapter,
把碎片管理器getSupportFragmentManager(),集合lis传送过去。
在布局添加ViewpPager,再把适配到的数据设置到ViewPager中。
4.加依赖包:design.
作用:可以设置书签导航,可让书签和ViewPager相互监听。
5.找到TabLayout的对象,让tablayout和Viewpager绑定.
tabLayout.setupWithViewPager(viewPager);
6.设置书签名称步骤:
a .初始化数据,把标签的名字添加到List集合中,把list传送到适配器中
b .在适配器中重写构造方法,再重写一个 getPageTitle方法,
返回一个String title = titleList.get(position);值。
7.如果多个导航标签,可利用滚动模式 :SCROLLABLE
代码展示:
1.MainActivity的代码:
public class Fragment_ViewPager_TabLayout extends AppCompatActivity {
private List<Fragment> list;
private ViewPager viewPager;
private TabLayout tabLayout;
private List<String> titleList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_viewpager_tab);
viewPager =
(ViewPager) findViewById(R.id.viewpager2);
tabLayout = (TabLayout) findViewById(R.id.tablayout);
loadData();
BaseFragmentPagerAdapter_TabLayout adapter = new BaseFragmentPagerAdapter_TabLayout(getSupportFragmentManager(),
list,titleList);
viewPager.setAdapter(adapter);
//tablayout和Viewpager绑定在一起
tabLayout.setupWithViewPager(viewPager);
//如果多个导航标签,则利用下面的的滚动模式
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
}
private void loadData() {
list = new ArrayList<Fragment>();
Fragment fragmentA = new Fragment_A();
list.add(fragmentA);
Fragment fragmentB = new Fragment_B();
list.add(fragmentB);
Fragment fragmentC = new Fragment_C();
list.add(fragmentC);
Fragment fragmentD = new Fragment_D();
list.add(fragmentD);
//.设置书签名称步骤:
//1.初始化数据,把书签的名称添加到List集合中,把list传送到适配器中
//2.在适配器中重写构造方法,再重写一个 getPageTitle方法,返回一个String title = titleList.get(position);值。
titleList = new ArrayList<>();
titleList.add("应用");
titleList.add("游戏");
titleList.add("主页");
titleList.add("管理");
}
}
2.FragmentPagerAdapter的代码:
public class BaseFragmentPagerAdapter_TabLayout extends FragmentPagerAdapter {
private final List<String> titleList;
private List<Fragment> list;
public BaseFragmentPagerAdapter_TabLayout(FragmentManager fm, List<Fragment> list, List<String> titleList) {
super(fm);
this.list=list;
this.titleList = titleList;
}
@Override
public Fragment getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
//这个方法用于添加表名
@Override
public CharSequence getPageTitle(int position) {
String title ="";
if(titleList!=null){
title = titleList.get(position);
}
return title;
}
}