BottomNavigationBar +Fragment使用解析

开篇:

今天要介绍的BottomNavigationBar这个控件,是

Google官方在自己推出的Material design中增加的底部导航


导入依赖:

compile 'com.ashokvarma.android:bottom-navigation-bar:2.0.2'


XML文件布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.administrator.mydemo.MainActivity">
      <android.support.v7.widget.Toolbar
          android:id="@+id/tb_toolbar"
          android:layout_width="match_parent"
          android:layout_height="?attr/actionBarSize"
          android:background="?attr/colorPrimary"
          >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我的demo集合"
        android:textColor="#080808"
        android:textSize="22sp"
         android:layout_gravity="center"/>
      </android.support.v7.widget.Toolbar>
    <FrameLayout
        android:id="@+id/fl_container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        >
    </FrameLayout>
    <com.ashokvarma.bottomnavigation.BottomNavigationBar
        android:id="@+id/bottom_navigation_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:bnbActiveColor="@color/btn_normal"
        />
</LinearLayout>

过渡独白:这里要新建三个fragment(根据你的需求而定),FastJsonFragment  GsonFragment   JsonFragment  


Java代码

本工具类的作用,为了方便管理Fragment
 设置static的作用是在程序运行时就创建好该类并可以使用,为mainactivity的方法提供值
 */
public class Fragmentfactory {
    private static FastJsonFragment fastJsonFragment=null;
    private static GsonFragment gsonFragment=null;
    private static JSonFragment jSonFragment=null;

    public static Fragment getFragment(int postin){
        switch (postin){
            case 0:
                if (jSonFragment==null){
                  jSonFragment=new JSonFragment();
                }
                return jSonFragment;
            case 1:
                if (gsonFragment==null){
                    gsonFragment=new GsonFragment();
                }
                return gsonFragment;
            case 2:
                if (fastJsonFragment==null){
                    fastJsonFragment=new FastJsonFragment();
                }
                return fastJsonFragment;
        }
        return jSonFragment;
    }
}


MainActivity

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;

import com.ashokvarma.bottomnavigation.BottomNavigationBar;
import com.ashokvarma.bottomnavigation.BottomNavigationItem;
import com.example.administrator.mydemo.Utils.Fragmentfactory;

import java.util.List;

public class MainActivity extends AppCompatActivity {
    Toolbar toolbar;
    BottomNavigationBar bottomNavigationBar;
    String []title={"JSon原生","Gson","FastJson"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar= (Toolbar) findViewById(R.id.tb_toolbar);
        bottomNavigationBar= (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
        InToolbar();
        initBottomBar();
        initFirstFragment();
    }

    //初始化顶部导航栏
    private void InToolbar() {
        toolbar.setTitle("");
       setSupportActionBar(toolbar);
    }
    
    private void initFirstFragment() {
        //使用fragmentTransaction.hide和show可能会导致重影
        FragmentManager fragmentManager=getSupportFragmentManager(); //v4包里的类
        List<Fragment> fragments=fragmentManager.getFragments();//获取有多少个fragment,并且添加到list集合里面
        if (fragments!=null&&fragments.size()>0){ //当list集合里面的fragment对象不为空,且fragment对象个数大于0时,执行
            for (Fragment fragment:fragments){  // 容器中元素类型   临时变量 :容器变量  foreach循环会自动遍历容器中每个元素
                FragmentTransaction fragmentTransaction=getSupportFragmentManager().beginTransaction();
                //移除残留的fragment
                fragmentTransaction.remove(fragment);
                //提交并保存
                fragmentTransaction.commit();
            }
        }
        //进入时默认显示第一个fragment界面
        FragmentTransaction fragmentTransaction=getSupportFragmentManager().beginTransaction();
        Fragment fragment=Fragmentfactory.getFragment(0);
        fragmentTransaction.add(R.id.fl_container,fragment);
        fragmentTransaction.commit();

    }


    //初始化底部导航栏
    private void initBottomBar() {
        bottomNavigationBar.addItem(new BottomNavigationItem(R.mipmap.yun,title[0]))
                              .addItem(new BottomNavigationItem(R.mipmap.ff,title[1]))
                              .addItem(new BottomNavigationItem(R.mipmap.ufo,title[2]))
                              .initialise();
        bottomNavigationBar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener() {
            //当点击进入这个fragment
            @Override
            public void onTabSelected(int position) {
                //获取fragment对象
                Fragment fragment= Fragmentfactory.getFragment(position);
                //创建fragment管理器
                FragmentManager fm=getSupportFragmentManager();
                //获取fragment事务
                FragmentTransaction transaction=fm.beginTransaction();
                //判断fragment是否添加
                if (!fragment.isAdded()){ //如果没有添加,进行添加到activity
                    transaction.add(R.id.fl_container,fragment);
                }else {   //添加了,就进行显示
                    transaction.show(fragment);
                }
                //保存并提交
                    transaction.commit();
            }
            //从这个fragment离开
            @Override
            public void onTabUnselected(int position) {
                Fragment fragment=Fragmentfactory.getFragment(position);
                FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
                //离开tab.进行隐藏
                transaction.hide(fragment);
                transaction.commit();
            }

            @Override
            public void onTabReselected(int position) {

            }
        });
    }

}

一个Fragment使用一般有的步骤:

1.创建Fragment对象
MyFragment fragment=new MyFragment();

2.获取到Fragment 管理器
FragmentManager supportFragmentManager = getSupportFragmentManager();

3.开启fragment事务
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();


4.添加fragment到activity
fragmentTransaction.add(R.id.fl_container,fragment);

5.fragment显示
fragmentTransaction.show(fragment);

6.fragment隐藏
fragmentTransaction.hide(fragment);

7判断fragment是否添加
fragment.isAdded()

8.fragment保存并提交,必要的结束
fragmentTransaction.commit();

这样一个底部导航就实现了,没有什么复杂的逻辑关系,很简单。。。。。。


猜你喜欢

转载自blog.csdn.net/qq_38812658/article/details/80227532