Android開發所見之坑

目錄

BottomNavigationView設置setOnNavigationItemSelectedListener後

超過3個item的menu點擊無效

解決方案一

解決方案二


在Android開發中經常碰到一些坑,讓自己忙碌很久才發現哪個地方出現了問題。其實可能都是難以發現的小細節和小疏漏,就會造成你無盡的麻煩和浪費時間。我總結下開發中碰到的問題,希望大家看得到後,碰到同樣的問題能少採坑。

BottomNavigationView設置setOnNavigationItemSelectedListener後

超過3個item的menu點擊無效

Xml中配置是這樣的:

menu菜單內容的xml文件配置是這樣的bottom_nav_menu:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/navigation_home"
        android:icon="@drawable/ic_home_black_24dp"
        android:title="@string/home"
        />
    <item
        android:id="@+id/navigation_classify"
        android:icon="@drawable/ic_classify"
        android:title="@string/classify"
        />
    <item
        android:id="@+id/navigation_find"
        android:icon="@drawable/ic_find"
        android:title="@string/find"
        />
    <item
        android:id="@+id/navigation_shopcar"
        android:icon="@drawable/ic_shopcar"
        android:title="@string/shopCar"
        />
    <item
        android:id="@+id/navigation_mine"
        android:icon="@drawable/ic_mine"
        android:title="@string/mine"
        />
</menu>

在onCreate中初始話爲如圖

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_home);  
        binding.navView.setOnNavigationItemSelectedListener(this);
        setData();
    }

menu中有5個item,當給BottomNavigationView設置setOnNavigationItemSelectedListener後發現第四個和第五個item無法點擊了,如圖:

 

解決方案一

添加一行代碼:

不可將setContentView(R.layout.activity_home);方法添加在 DataBindingUtil.setContentView(this, R.layout.activity_home)之前,否則還是無法解決問題:

解決方案二

將BottomNavigationView.OnNavigationItemSelectedListener 的實例化放在onCreate外邊可以接覺該問題

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_home);
        binding.navView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
        setData();
    }

//在class括號內就初始化,不可放入onCreate中初始化
    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                    return true;
                case R.id.navigation_classify:
                    return true;
                case R.id.navigation_find:
                    return true;
                case R.id.navigation_shopcar:
                    return true;
                case R.id.navigation_mine:
                    return true;
            }
            return false;
        }
    };

方案一和 方案二可解決問題,如圖。

我們在進行Fragment+底部導航欄時,以前底部欄常採用的方式爲使用Radiogroup的方式解決,其實大家嘗試用用BottomNavigationView,也不錯哦。

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