BottomNavigation View OnNavigationItemSelectedListener 已弃用

问题描述 投票:0回答:7

我正在按照Material Design

尝试Android的BottomNavigationView实现

但是,在 MainActivity 代码中,我收到一条警告,指出

OnNavigationItemSelectedListener
已弃用 - 请参阅下面的快照

尝试过使用 BottomNavigationView 的替代方法,但我找不到它。

向任何人寻求帮助,但与此同时,我已将 BottomView 的菜单项 id 与片段目标 id 进行匹配,并成功实现了导航,但存在无法使用片段名称更新工具栏标题的限制。

android android-navigation
7个回答
65
投票

只需使用

OnItemSelectedListener
界面:

科特林

bottomNavigationView?.setOnItemSelectedListener { item ->
    // do stuff

    return@setOnItemSelectedListener true
}

Java

bottomNavigationView.setOnItemSelectedListener(item -> {
    // do stuff

    return true;
});

19
投票
  binding!!.bottomNavigationView.setOnItemSelectedListener{
        when (it.itemId) {
            R.id.home_menu -> {
                openFragment(HomeFragment.newInstance("", ""))
                return@setOnItemSelectedListener true
            }
            R.id.deals -> {
                openFragment(DealFragment.newInstance("", ""))
                return@setOnItemSelectedListener true
            }
            R.id.history -> {
                openFragment(HistoryFragment.newInstance("", ""))
                return@setOnItemSelectedListener true
            }
            R.id.page_2 -> {
                openFragment(AccountFragment.newInstance("", ""))
                return@setOnItemSelectedListener true
            }
        }
        false
    }

试试这个!!.


5
投票

您可以使用Bubble Navigation代替BottomNavigationView。

Bubble Navigation 是一个轻量级库,可以通过大量🎨自定义选项轻松制作漂亮的导航栏。


4
投票

这是 Kotlin 的解决方案。确保

return@setOnItemSelectedListener true
,这行代码会更改导航视图中菜单项的颜色。

bottomNavigationView.setOnItemSelectedListener {
        when (it.itemId) {
            R.id.firstId -> {
                // Write your code here
            }
            R.id.secondID-> {
                // Write your code here
            }
        }
        return@setOnItemSelectedListener true
    }

4
投票

OnNavigationItemSelectedListener 现在不推荐使用 setOnItemSelectedListener 下面的一些示例 -

bottomNav.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
            @SuppressLint("NonConstantResourceId")
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {

                switch (item.getItemId()) {
                    case R.id.bottom_m_home:
                        viewPager.setCurrentItem(0);
                        break;
                    case R.id.bottom_m_reward:
                        viewPager.setCurrentItem(1);
                        break;
                    case R.id.bottom_m_wallet:
                        viewPager.setCurrentItem(2);
                        break;
                    case R.id.bottom_m_share:
                        viewPager.setCurrentItem(3);
                        break;
                    default:
                        viewPager.setCurrentItem(0);
                }
                return true; // return true;
            }
        });

2
投票

我无法让

setOnItemSelectedListener
工作,因为我也在使用
setupWithNavController
,所以我切换到
addOnDestinationChangedListener
并且它起作用了。

navController.addOnDestinationChangedListener((controller, destination, arguments) -> {
     if(destination.getId()==R.id.menu_item_id){
      //navigate to other activity
     }
})

来源


0
投票

通过findviewby id而不是数据绑定访问bottomNavigationView。

    val bottomNav = findViewById<BottomNavigationView>(R.id.bottom_navigation_view)
    bottomNav.setOnItemSelectedListener { item ->
        when (item.itemId) {
            //do your code
        }
        true
    }
© www.soinside.com 2019 - 2024. All rights reserved.