我正在按照Material Design
尝试Android的BottomNavigationView实现但是,在 MainActivity 代码中,我收到一条警告,指出
OnNavigationItemSelectedListener
已弃用 - 请参阅下面的快照
尝试过使用 BottomNavigationView 的替代方法,但我找不到它。
向任何人寻求帮助,但与此同时,我已将 BottomView 的菜单项 id 与片段目标 id 进行匹配,并成功实现了导航,但存在无法使用片段名称更新工具栏标题的限制。
只需使用
OnItemSelectedListener
界面:
科特林
bottomNavigationView?.setOnItemSelectedListener { item ->
// do stuff
return@setOnItemSelectedListener true
}
Java
bottomNavigationView.setOnItemSelectedListener(item -> {
// do stuff
return true;
});
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
}
试试这个!!.
这是 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
}
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;
}
});
我无法让
setOnItemSelectedListener
工作,因为我也在使用 setupWithNavController
,所以我切换到 addOnDestinationChangedListener
并且它起作用了。
navController.addOnDestinationChangedListener((controller, destination, arguments) -> {
if(destination.getId()==R.id.menu_item_id){
//navigate to other activity
}
})
通过findviewby id而不是数据绑定访问bottomNavigationView。
val bottomNav = findViewById<BottomNavigationView>(R.id.bottom_navigation_view)
bottomNav.setOnItemSelectedListener { item ->
when (item.itemId) {
//do your code
}
true
}