BottomNavigationBar+Viewpager+Fragment遇到的坑

本文详述了如何使用BottomNavigationBar、ViewPager和Fragment在Android应用中实现底部导航栏效果。从创建多个Fragment到整合ViewPager,再到实现BottomNavigationBar的监听器,文章提供了完整的步骤和代码示例。
摘要由CSDN通过智能技术生成

BottomNavigationBar+Viewpager+Fragment遇到的坑

之前看了Android学习之BottomNavigationBar实现Android特色底部导航栏后觉得这效果很酷,想要实现和他一样的底部效果,但是在最后的效果是不能切换页面作为一名安卓小白只能下载他的DEMO,结果发现他的可以运行出来但是我的就不可以,最后终于知道是要用fragment+viewpager结合才行

我想开始记录一下实习安卓中每天遇到的问题和解决方案,供大家参考

###按照他的代码打后需要改动的地方有

1.添加五个fragment,每一个fragment都是独立的(我设置成第一,第二,第三,第四,第五个fragment)
fragment的代码如下

public class SecondFragment extends Fragment {


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view= inflater.inflate(R.layout.second_fragment_layout,container,false);

        return view;
    }


}

每一个fragment的布局如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="#FFFFFF"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView
        android:id="@+id/tv"
        android:text="dongtai"
        android:textColor="@color/deep_black"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        />
</LinearLayout>

都是类似的我就不一一贴出来了
2.修改mainActivity的界面布局,换成是viewpager+BottomNavigationBar

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#ececec">
    <android.support.v4.view.ViewPager
       android:id="@+id/vp_main_View"
       android:layout_weight="1"
       android:layout_width="match_parent"
       android:layout_height="0dp">
   </android.support.v4.view.ViewPager>
    <com.ashokvarma.bottomnavigation.BottomNavigationBar
        android:id="@+id/bottom_navigation_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom" />
</LinearLayout>

3.MainAvtivity中初始化viewpager

private void initViewPager() {
        viewPager = (ViewPager) findViewById(R.id.vp_main_View);

        fragments = new ArrayList<Fragment>();
        fragments.add(new FirstFragment());
        fragments.add(new SecondFragment());
        fragments.add(new ThirdFragment());
        fragments.add(new FourthFragment());
        fragments.add(new FifthFragment());

        viewPager.setAdapter(new SectionsPagerAdapter(getSupportFragmentManager(), fragments));
        viewPager.addOnPageChangeListener(this);
        viewPager.setCurrentItem(0);
    }

4最关键的是

viewPager.addOnPageChangeListener(this);

bottomNavigationBar.setTabSelectedListener(this);
这就是说bar的点击改变了viewpager的点击事件,然后在viewpager里面改变里面的每一个fragment
我作为小白才突然恍然大悟

而在BAR的三个需要实现的方法中,最重要的是在

  @Override
    public void onTabSelected(int position) {
        viewPager.setCurrentItem(position);
    }

添加viewPager的相对于的改变ITEM

而在viewPager的三个需要实现的方法中,也同样

  public void onPageSelected(int position) {
        bottomNavigationBar.selectTab(position);
    }

需要实现BAR的哪个TAB被点击了

5.最后一步就是要有自己的适配器,因为每一个viewpager要有自己的适配器才能知道哪个选择要做什么改变

class SectionsPagerAdapter extends FragmentPagerAdapter {
        List<Fragment> fragments;

        public SectionsPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
            super(fm);
            this.fragments = fragments;
        }

        @Override
        public Fragment getItem(int position) {
            return fragments.get(position);
        }

        @Override
        public int getCount() {
            return fragments.size();
        }
    }

最后附上实现效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值