当前位置: 首页 > 知识库问答 >
问题:

setOnNavigationItemSelectedListener已弃用

颜功
2023-03-14

目前我正在开发一个带有三个菜单项的底部导航栏的应用程序。我曾使用setOnNavigationItemSelectedListener()来单击项目。但现在我面临的问题是该方法已贬值。

  • 应用程序语言:Java
  • 问题:“setOnNavigationItemSelectedListener(com.google.android.material.bottomnavigation.BottomNavigationView.OnNavigationItemSelectedListener)”已被弃用

有什么办法解决吗?有没有比setOnNavigationItemSelectedListener()更好的方法呢。

共有3个答案

齐承运
2023-03-14

我们可以使用setOnItemSelectedListener代替setOnNavigationItemSelectedListener,也可以使用setOnItemReselectedListener代替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
}
国言
2023-03-14

您可以尝试设置OnItemSelectedListener。其工作原理与setOnNavigationItemSelectedListener()相同

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
        }
祁乐邦
2023-03-14

根据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)#OnItemSelectedListener(OnItemSelectedListener)和导航栏视图(NavigationBarView)#OnItemReselectedListener(OnItemReselectedListener),但从未添加弃用文档,因此不清楚开发人员应该使用什么替代。

 类似资料:
  • 问题内容: 今天,我决定将我的android应用程序从Java转换为Kotlin!:)但是,当我输入以下内容时,我感到非常惊讶: 然后Android Studio告诉我:“’getActionView(MenuItem!):View!’ 已弃用。Java中已弃用“ 因此,在问您解决方案之前,我先问谷歌解决方案是什么,我相信我找到了解决方案:“直接使用getActionView()”。 所以我像这样

  • 由于API 27已弃用。对此最好的替代方案是什么? 在我的例子中,我知道需要使用之类的东西,但我不知道在我的代码中这需要去哪里。 我在班上得到了这些进口货: 但是 被划掉了。

  • 我一直在开发一个使用Google Drive API的Android应用程序。它最初是从这里的quickstart示例构建的。API调用的简化序列(此处未显示正确的错误处理)是: 它一直运行良好,我正准备发布我的应用程序。但是,在驱动器API更新之后,我突然收到一个警告 方法usingOAuth2(Context,String,String...)GoogleAccountCredential是不

  • Variable (已弃用) Variable 是早期添加到 RxSwift 的概念,通过 “setting” 和 “getting”, 他可以帮助我们从原先命令式的思维方式,过渡到响应式的思维方式。 但这只是我们一厢情愿的想法。许多开发者滥用 Variable,来构建 重度命令式 系统,而不是 Rx 的 声明式 系统。这对于新手很常见,并且他们无法意识到,这是代码的坏味道。所以在 RxSwift

  • 问题内容: 我正在3.6.0版中使用Hibernate,并且AnnotationConfiguration标记为已弃用。 这是我的HibernateUtil.java类中的行: 什么是AnnotationConfiguration的替代品? 问题答案: “所有功能已移至配置”:http : //docs.jboss.org/hibernate/core/3.6/javadocs/org/hiber

  • 问题内容: 我最近将我的项目的Jasper Reports库从 3.7.6 升级到了 6.0.0 。我终于可以进行Maven构建,并且报告工作得很好。但是, setParameter() 函数在两个发行版之间似乎已被弃用,并且我不确定如何重构我的代码以适应此问题。 不推荐使用的代码示例: 我浏览了SourceForge页面,可以看到它已被 ExporterInput , ExporterConfi