新框架地址ndileber框架 今天主要使用到的是框架中的一个工具类,底部菜单导航栏。 效果特写:
菜单的源码在这里菜单源码
下面我就开始在activity中使用这个菜单了。 首先activity 继承baseActivity
之后我便在oncreate 方法中写代码了。 如下
private List<Fragment> list = new ArrayList<>(); BottomBar mBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); mBar= getView(R.id.bar); //由于我采用字体图标库,实际上R.string.home2就是上图中的小房子图标,字体图标库,参照这篇文章[字体图标讲解](http://blog.csdn.net/s297165331/article/details/50616338 "字体图标讲解") 新框架与旧框架用法相同 mBar.addItem(new BottomBarTab(this,R.string.home2,BottomBarTab.TYPE_FONT)). addItem(new BottomBarTab(this,R.string.bubbles,BottomBarTab.TYPE_FONT)). addItem(new BottomBarTab(this,R.string.newspaper,BottomBarTab.TYPE_FONT)). addItem(new BottomBarTab(this,R.string.cogs,BottomBarTab.TYPE_FONT)); mBar.setOnClickItemMenu(new BottomBar.OnClickItemMenu() { @Override public void onClickItem(int nowPosition,int position) { switchContent(list.get(nowPosition),list.get(position)); } }); addMenu(savedInstanceState); }addmenu是方法的关键,上面只是阐述菜单的生成,不多做讲解:
private void addMenu(Bundle savedInstanceState){ HomeItemFragment homeItemFragment = ActivityUtils.getFragment(getSupportFragmentManager(),R.id.homeFrame,HomeItemFragment.newInstance(3)); MessageFragment messageFragment = ActivityUtils.getFragment(getSupportFragmentManager(),R.id.messageFrame,MessageFragment.newInstance("1","2")); ConsultFragment consultFragment = ActivityUtils.getFragment(getSupportFragmentManager(),R.id.consultFrame,ConsultFragment.newInstance("2","3")); SettingFragment settingFragment = ActivityUtils.getFragment(getSupportFragmentManager(),R.id.settingFrame,SettingFragment.newInstance("4","5")); list.add(homeItemFragment); list.add(messageFragment); list.add(consultFragment); list.add(settingFragment); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.hide(messageFragment).hide(consultFragment).hide(settingFragment).commit(); if(savedInstanceState!=null){ mBar.setCurrentItem(savedInstanceState.getInt(SELECT)); } }addMenu中用到了activityutil类,这个是获取fragment的关键方法: activityUtils 方法解释如下:
//首先对fragment进行判空,就不解释了,之后先对fragment判断是否存在,如果存在的话就进行复用,(你可能有如下问题:为什么呢?明明写到oncreate中,为什么还要判断呢?)。比如说当前页面进行屏幕横竖操作,这时候就发生了一点问题,fragment重叠了(oncreate执行了,原来拥有的fragment依然存在),所以会出现重叠现象。我在看别人博客的时候发现有很多的博客写的有问题,有些博客甚至去修改onSaveInstanceState和onRestoreInstanceState方法,写法并不是很完美。我如下的写法,一方面是可以解决重叠问题,另一方面构建出的工具类可以直接在代码中使用~ public static <T extends Fragment>T getFragment(@NonNull FragmentManager fragmentManager,@NonNull int fragmentId,@NonNull T myFragment){ Check.checkNotNull(fragmentManager); Check.checkNotNull(fragmentId); Check.checkNotNull(myFragment); T fragment = (T)fragmentManager.findFragmentById(fragmentId); if (fragment == null) { fragment = myFragment; addFragmentToActivity(fragmentManager, fragment,fragmentId); } return fragment; }切换菜单的方法
public void switchContent(Fragment from, Fragment to) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个 }上面是一个menu的创建与使用方法,目前我在开发一个项目,去整合框架中的使用例子。后期会把源码放在我的github上项目例子