问题描述
目前我正在开发一个底部导航栏和三个菜单项的应用程序。我已将 setonNavigationItemSelectedListener()
用于被点击的项目。但现在我面临这个方法已经贬值的问题。
- 应用语言:
Java
- 问题:
'setonNavigationItemSelectedListener(com.google.android.material.bottomnavigation.BottomNavigationView.OnNavigationItemSelectedListener)' is deprecated
有什么办法可以解决吗?有没有比 setonNavigationItemSelectedListener()
方法更好的替代方法。
解决方法
你可以试试setonItemSelectedListener
。它的工作原理与 setOnNavigationItemSelectedListener()
[在 android 11 中测试]
bnv.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
switch(id){
//check id
}
return true;
}
});
科特林:
bnv.setOnItemSelectedListener { item ->
when (item.itemId) {
}
true
}
,
根据 github 来源已弃用:BottomNavigationView.setOnNavigationItemSelectedListener
在其评论中,您可以阅读:
@deprecated Use {@link NavigationBarView#setOnItemSelectedListener(OnItemSelectedListener)}
* instead.
因此使用其基类中的 NavigationBarView.setOnItemSelectedListener:
/**
* Set a listener that will be notified when a navigation item is selected. This listener will
* also be notified when the currently selected item is reselected,unless an {@link
* OnItemReselectedListener} has also been set.
*
* @param listener The listener to notify
* @see #setOnItemReselectedListener(OnItemReselectedListener)
*/
public void setOnItemSelectedListener(@Nullable OnItemSelectedListener listener) {
selectedListener = listener;
}
另见此commit
因为它解释了有关此更改的混淆:
不推荐使用监听器
NavigationBarView#OnItemSelectedListener
和
NavigationBarView#OnItemReselectedListener
,但已弃用
从未添加文档,因此不清楚开发人员应该做什么
改用。
viewBindingMainActivity.navView.setOnItemSelectedListener { menuItem ->
if (menuItem.itemId != R.id.navigation_home) {
Add your code
false
} else {
Add your code
true
}
}