最近尝试做一个有社交网络服务和IM服务的项目,想使用比较流行的方式实现程序的导航,一开始
借鉴了网上的DrawerLayout加ViewPager的模式,但始终觉得界面不够直观,于是改变想法,采用
了底部大类导航栏加顶端Tab小类导航加ViewPager的导航模式,有点像微信的导航模式(某种程度上来
说有完全不像,笑),主要涉及到ViewPager,Fragment,FragmentPagerAdapter,由于网上例子
很多,主要写一些体会
程序界面:
大类实现(我把底端的导航称为大类)
采用一组RadioGroup,在onCheckedChanged方法中给出Fragment的切换规则
使用selector为RadioButton设置触发时的响应
Fragment内容填充的一个FrameLayout布局中(注意设置layout_weight以保证占满屏幕)
中间的分割线可以考虑通过ImageView来实现(设置高度1dp,background为灰)
小类下的细分(使用ViewPager+FragmentPagerAdapter实现)
顶端的两个Tab可以考虑使用TextView+绘制滑动条来实现
重写FragmentPagerAdapter:
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> fragmentsList;
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
public MyFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragments) {
super(fm);
this.fragmentsList = fragments;
}
@Override
public int getCount() {
return fragmentsList.size();
}
@Override
public Fragment getItem(int arg0) {
return fragmentsList.get(arg0);
}
@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}
}
在setAdapter时注意使用getChildFragmentManager,因为如果在Fragment中嵌套Fragment,要用
getChildFragmentManager
例子:
mPager.setAdapter(new MyFragmentPagerAdapter(getChildFragmentManager(), fragmentsList));
重写OnPagerChangeListener