setOnNavigationItemSelectedListener deprecated



目前我正在开发一个应用程序,该应用程序的底部导航栏有三个菜单项。我已将setOnNavigationItemSelectedListener()用于单击的项目。但现在我面临的问题是,这种方法已经贬值了。

  • 应用程序语言:Java
  • 发行:'setOnNavigationItemSelectedListener(com.google.android.material.bottomnavigation.BottomNavigationView.OnNavigationItemSelectedListener)' is deprecated

有什么办法解决吗?有没有比CCD_ 4方法更好的替代方法。

根据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;
}

另请参阅此提交

正如它解释了对这一变化的困惑:

听众反对使用NavigationBarView#OnItemSelectedListenerNavigationBarView#OnItemReselectedListener,但弃用文档从未添加,因此不清楚开发人员应该做什么请改用。

您可以尝试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
}

我们可以使用setOnItemSelectedListener而不是setOnNavigationItemSelectedListenersetOnItemReselectedListener代替setOnNavigationItemReselectedListener

navView.setOnItemSelectedListener {
// do something
true
}
// In case the default menu can be the first menu 
// Should set the default selected menu BETWEEN setOnItemSelectedListener and setOnItemReselectedListener. 
// It will make setOnItemSelectedListener fired when you launch app. 
// If you set default menu AFTER setOnItemReselectedListener. 
// Then setOnItemReselectedListener will fired when you launch app
navView.selectedItemId = R.id.navigation_home

navView.setOnItemReselectedListener {
// do something
}

您可以在Kotlin 中使用

buttmNav.setOnItemSelectedListener { item ->
when (item.itemId) {
}
true
}
public class HomeActivity extends AppCompatActivity implements NavigationBarView.OnItemSelectedListener {
BottomNavigationView bottomNavigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
bottomNavigationView = findViewById(R.id.bottom_nav);
bottomNavigationView.setOnItemSelectedListener(this);
displayfragment(new FragmentHome());
}
private void displayfragment(Fragment fragment) {
getSupportFragmentManager().beginTransaction().replace(R.id.content_area, fragment).commit();

}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment fragment;
switch (item.getItemId()) {
case R.id.nav_home:
fragment = new FragmentHome();
break;
case R.id.nav_fav:
fragment = new FavouriteFragment();
break;
case R.id.nav_set:
fragment = new FragmentSetting();
break;
default:
fragment = new FragmentHome();
break;
}
displayfragment(fragment);
return true;
}
}

kotlin:使用setOnItemSelectedListener

bottomNavigationView.setOnItemSelectedListener { item: MenuItem ->
when (item.itemId) {
R.id. ... -> {
Add your code
true
}

else ->
true
}

viewBindingMainActivity.navView.setOnItemSelectedListener { menuItem ->
if (menuItem.itemId != R.id.navigation_home) {
Add your code
false
} else {
Add your code
true
}
}

在代码的下面添加一行@SuppressWarnings("弃用"(

最新更新