一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

使用Fragment+ViewPager实现底部导航栏

时间:2018-06-29 编辑:猪哥 来源:一聚教程网

前几天准备写一个小程序,一直认为fragment实现底部导航栏,是很容易的事情,可是却遇到了前所未有的问题,先给大家贴出来我出错的界面布局代码:

 
 
  
 
  
 
   
 
    
 
    
 
    
   
 
   
  
 
 

这个布局实现的效果如下:

只看效果,大家觉得挺好的,但是重要的问题来了。

下面的radioButton点了没反应,我检查了一下xml文件,再检查了一下java代码,没有问题啊,我开始方了,,,然后网上搜,好像没有人遇到这个问题,,检查好几遍之后,问旁边的同学,他说 既然设置了监听,但是没有反应,那肯定是有一个东西把这个事件消费掉了,我想起来了之前看的事件分发机制,,建议大家对事件分发机制不懂的小伙伴赶紧看看,面试和日常写代码都要用到,特别是面试,面试官特别喜欢问。

回归正题,大家看我的 xml文件,我把viewpager写在了Radiogroup的下面,并且,layout_     这样我的viewpager就消费掉了我的radiobutton的点击事件,其实之后我觉得,是我的逻辑不正确,我应该顺序的写下来,而不是只实现功能,这样我看自己的代码可以看懂,可是给别人可能会造成误解。

好了,开始说一下,实现底部导航的整个流程,实现的界面还如上:(在studio中写的)

actionbar.xml  上面自定义的 actionbar  系统自带的actionbar在java代码中去掉了

代码功能:  左边返回键 中间显示的文字 右边的 更多 键   上图中没有显示出来,是因为我没有让 左右的键显示出来

 
 
  
   
  
  
  
   
  
 
 
 

activity_main.xml 文件 
中间的部分color资源,是我引用的自动的,大家可以自己选择

 
 
  
  
  
 
   
    
    
    
   
 

注意一下,radiobutton中的一个属性是  drawableTop属性, 这个后面引用的drawable资源是 实现 点击改变radiobutton状态的布局文件,我给大家贴出来 radio_bt_plan.xml文件的代码,其他的只要新建,copy代码,改显示的图片即可。
还有,对于初次用studio的伙伴,这里要注意了,new的时候,drawable --->右键  ---->  new ----> new resource file (即 出来的第一个) 而不是XML

radio_bt_plan.xml

 
 
  
  
  
  
 
 

接下来就是  MainActivity.java文件了

public class MainActivity extends FragmentActivity { 
 private TextView title_text; 
 private ViewPager vp_main_tab; 
 private List fragmentList = null; 
 private FragmentPagerAdapter mAdapter = null; 
 
 private MyFragment myFragment; 
 private TimeGroupFragment timeGroupFragment; 
 private PlanningFragment planningFragment; 
 
 private RadioButton rb_main_tab_menu1; 
 private RadioButton rb_main_tab_menu2; 
 private RadioButton rb_main_tab_menu3; 
 private RadioGroup rg_main_group; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  requestWindowFeature(Window.FEATURE_NO_TITLE); 
  setContentView(R.layout.activity_main); 
  init(); 
  rg_main_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
 
   @Override 
   public void onCheckedChanged(RadioGroup group, int checkedId) { 
    switch (checkedId) { 
     case R.id.rb_main_tab_menu1: 
      vp_main_tab.setCurrentItem(0); 
      initActionbar(0); 
      break; 
     case R.id.rb_main_tab_menu2: 
      vp_main_tab.setCurrentItem(1); 
      initActionbar(1); 
      break; 
     case R.id.rb_main_tab_menu3: 
      vp_main_tab.setCurrentItem(2); 
      initActionbar(2); 
      break; 
     default: 
      break; 
    } 
 
   } 
  }); 
  initViewPage(); 
 } 
 private void initActionbar(int currentPage) { 
  switch (currentPage) { 
   case 0: 
    title_text.setText(getResources().getString(R.string.TimeRobot)); 
    break; 
   case 1: 
    title_text.setText(getResources().getString(R.string.timeGroup)); 
    break; 
   case 2: 
    title_text.setText(getResources().getString(R.string.My)); 
    break; 
   default: 
    break; 
  } 
 } 
 private void init() { 
  title_text = (TextView) findViewById(R.id.tv_title_actionbar); 
  vp_main_tab = (ViewPager) findViewById(R.id.vp_activity_main); 
  fragmentList = new ArrayList(); 
  rg_main_group = (RadioGroup) findViewById(R.id.rg_main_radioGroup); 
  rb_main_tab_menu1 = (RadioButton) findViewById(R.id.rb_main_tab_menu1); 
  rb_main_tab_menu2 = (RadioButton) findViewById(R.id.rb_main_tab_menu2); 
  rb_main_tab_menu3 = (RadioButton) findViewById(R.id.rb_main_tab_menu3); 
 
  myFragment = new MyFragment(); 
  timeGroupFragment = new TimeGroupFragment(); 
  planningFragment = new PlanningFragment(); 
 
  fragmentList.add(myFragment); 
  fragmentList.add(timeGroupFragment); 
  fragmentList.add(planningFragment); 
 
 
 } 
 
 private void initViewPage() { 
  android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); 
  mAdapter = new FragmentPagerAdapter(fm) { 
 
   @Override 
   public int getCount() { 
    return fragmentList == null ? 0 : fragmentList.size(); 
   } 
 
   @Override 
   public android.support.v4.app.Fragment getItem(int position) { 
    return fragmentList.get(position); 
   } 
  }; 
  vp_main_tab.setAdapter(mAdapter); 
  vp_main_tab.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
 
   @Override 
   public void onPageSelected(int position) { 
    initActionbar(position); 
    switch (position) { 
     case 0: 
      rb_main_tab_menu1.setChecked(true); 
      break; 
     case 1: 
      rb_main_tab_menu2.setChecked(true); 
      break; 
     case 2: 
      rb_main_tab_menu3.setChecked(true); 
      break; 
     default: 
      break; 
    } 
   } 
 
   @Override 
   public void onPageScrolled(int arg0, float arg1, int arg2) { 
   } 
 
   @Override 
   public void onPageScrollStateChanged(int state) { 
   } 
  }); 
 } 
} 
这就是整个是实现经过,如有什么不足的地方,还请多多指教;

热门栏目