博客
关于我
Android中使用ViewPager和Fragment实现底部导航栏
阅读量:377 次
发布时间:2019-03-04

本文共 4574 字,大约阅读时间需要 15 分钟。

1、最终效果展示

附:中间部分可以左右滑动在这里插入图片描述

2、核心类和布局

(1)activity_main主页面布局

(2)底部导航栏部分bottom布局

(3)MainActivity.java

/** * 使用FragmentActivity,它是基于Fragment实现的活动类 */public class MainActivity extends FragmentActivity implements View.OnClickListener {    //声明ViewPager    private ViewPager mViewPager;    //适配器    private FragmentPagerAdapter mAdapter;    //装载Fragment的集合    private List
mFragments; //三个Tab对应的布局 private LinearLayout mTab1,mTab2,mTab3; //三个Tab对应的ImageButton private ImageButton mImg1,mImg2,mImg3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initViews();//初始化控件 selectTab(0);//初始页面为主页面 initEvents();//初始化事件 initDatas();//初始化数据 } //初始化控件 private void initViews(){ mViewPager = (ViewPager) findViewById(R.id.id_viewpager); mTab1 = (LinearLayout) findViewById(R.id.id_tab1); mTab2 = (LinearLayout) findViewById(R.id.id_tab2); mTab3 = (LinearLayout) findViewById(R.id.id_tab3); mImg1 = (ImageButton) findViewById(R.id.id_tab_img1); mImg2 = (ImageButton) findViewById(R.id.id_tab_img2); mImg3 = (ImageButton) findViewById(R.id.id_tab_img3); } private void initEvents(){ //设置三个Tab的点击事件 mTab1.setOnClickListener(this); mTab2.setOnClickListener(this); mTab3.setOnClickListener(this); } private void initDatas(){ mFragments=new ArrayList<>(); //将三个Fragment加入集合中 mFragments.add(new HomeFragment()); mFragments.add(new RecommendFragment()); mFragments.add(new MineFragment()); //初始化适配器 mAdapter=new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return mFragments.get(position); } @Override public int getCount() { return mFragments.size(); } }; //设置ViewPager的适配器 mViewPager.setAdapter(mAdapter); //设置ViewPager的切换监听 mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { //页面滚动事件 @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } //页面选中事件 @Override public void onPageSelected(int position) { //设置position对应的集合中的fragment mViewPager.setCurrentItem(position); resetImgs(); selectTab(position); } //页面滚动状态改变事件 @Override public void onPageScrollStateChanged(int state) { } }); } @Override public void onClick(View view) { //先将三个ImageButton置为灰色 resetImgs(); switch (view.getId()){ case R.id.id_tab1: selectTab(0); break; case R.id.id_tab2: selectTab(1); break; case R.id.id_tab3: selectTab(2); break; } } //将三个ImageButton设置为灰色 private void resetImgs() { mImg1.setImageResource(R.drawable.icon1); mImg2.setImageResource(R.drawable.icon2); mImg3.setImageResource(R.drawable.icon3); } private void selectTab(int i) { //根据点击的Tab设置对应的ImageButton为选中的颜色 switch (i) { case 0: mImg1.setImageResource(R.drawable.icon1_selected); break; case 1: mImg2.setImageResource(R.drawable.icon2_selected); break; case 2: mImg3.setImageResource(R.drawable.icon3_selected); break; } //设置当前点击的Tab所对应的页面 mViewPager.setCurrentItem(i); }}

3、三个fragment,都一样

(1)新建三个blank fragment,我自己的是HomeFragment,RecommendFragment,MineFragment

/** * 首页HomeFragment */public class HomeFragment extends Fragment {    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        return inflater.inflate(R.layout.fragment_home, container, false);    }}

(2)三个fragment的布局文件也都一样

附:在此之前也试过另一种办法,可参考:

https://blog.csdn.net/guolin_blog/article/details/13171191

你可能感兴趣的文章
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
查看>>
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>
Mysql中常用函数的使用示例
查看>>
MySql中怎样使用case-when实现判断查询结果返回
查看>>