BottomNavigationView +fragment的使用

Android Studio 在添加Activity的時候是可以創建一些帶模板的activity 的,比如自Base Activity、Empty Activity、FullScreen Activity、Bottom Navifation Activity

自己常用的就是Empty Activity ,它會自動在清單文件中註冊activity和創建佈局文件,當然這些都是可以選擇的,今天心血來潮的創建了一個Bottom Navigation Activity 模板的類,發現了這個BottomNavigationVIew,它是Android Support Library 25.0.0 版本中,新增加了一個API,底部導航視圖。

先看一下studio 模板中的代碼

看一下BottomNavigationView的底部導航佈局文件menu類型的哦!!!它的寫法與正常的menu文件一致
<?xml version="1.0" encoding="utf-8"?>

Avtivity佈局文件很簡單:

       
<?xml version="1.0" encoding="utf-8"?>


這幾個屬性可以根據需求寫在佈局文件中:
app:itemIconTint : 設置菜單圖標着色
app:itemTextColor : 設置菜單文本顏色
app:menu : 設置菜單
app:itemBackground : 設置導航欄的背景色

         在activity中申明控件,爲BottomNavigationView添加一個條目選擇監聽OnNavigationItemSelectedListener,當選中的條目變化到時候,動態改變textview的值。

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                    mTextMessage.setText(R.string.title_home);
                    return true;
                case R.id.navigation_dashboard:
                    mTextMessage.setText(R.string.title_dashboard);
                    return true;
                case R.id.navigation_notifications:
                    mTextMessage.setText(R.string.title_notifications);
                    return true;
            }
            return false;
        }

    };


這時實現的效果就是當點擊底部按鈕時,TextView上的數據就是相應的去改變,很容易讓我們想到大部分APP 的首頁,但是首頁如果只給個textview那是不可能,就想按照以往的經驗去和Fragment結合使用。
         

package com.song.wallpager;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends FragmentActivity {

    

    private Fragment1 fragment1;
    private Fragment2 fragment2;
    private Fragment3 fragment3;
    private Fragment[] fragments;
    private int lastShowFragment = 0;

    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                    if (lastShowFragment != 0) {
                        switchFrament(lastShowFragment, 0);
                        lastShowFragment = 0;
                    }
                    return true;
                case R.id.navigation_dashboard:
                    if (lastShowFragment != 1) {
                        switchFrament(lastShowFragment, 1);
                        lastShowFragment = 1;
                    }
                    return true;
                case R.id.navigation_notifications:
                    if (lastShowFragment != 2) {
                        switchFrament(lastShowFragment, 2);
                        lastShowFragment = 2;
                    }
                    return true;
            }
            return false;
        }

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
        initFragments();
    }

    /**
     * 切換Fragment
     *
     * @param lastIndex 上個顯示Fragment的索引
     * @param index     需要顯示的Fragment的索引
     */
    public void switchFrament(int lastIndex, int index) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.hide(fragments[lastIndex]);
        if (!fragments[index].isAdded()) {
            transaction.add(R.id.fragment_container, fragments[index]);
        }
        transaction.show(fragments[index]).commitAllowingStateLoss();
    }

    private void initFragments() {
        fragment1 = new Fragment1();
        fragment2 = new Fragment2();
        fragment3 = new Fragment3();
        fragments = new Fragment[]{fragment1, fragment2, fragment3};
        lastShowFragment = 0;
        getSupportFragmentManager()
                .beginTransaction()
                .add(R.id.fragment_container, fragment1)
                .show(fragment1)
                .commit();
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章