【问题标题】:Detecting tab change when using Android Navigation Component with Bottom Navigation使用带有底部导航的 Android 导航组件时检测选项卡更改
【发布时间】:2021-05-27 21:35:55
【问题描述】:

我目前有一个使用带有底部导航的导航组件的应用程序 (Java)。每个标签都有一个片段。

其中一个片段导航到具有音频播放器(使用媒体播放器)的辅助片段。这个 audi 片段有以下代码,当我回到父片段时会停止音频:

@Override
public void onDestroy() {
    super.onDestroy();
    if (mp != null) {
        mp.pause();
        mp = null;
    }
}

问题是,当播放音频时,我从底部导航点击不同的选项卡,音频会继续播放。我想到了使用以下内容:

@Override
public void onStop() {
    super.onStop();
    if (mp != null) {
        mp.pause();
        mp = null;
    }
}

这解决了问题,但它也阻止了屏幕关闭时播放音频。 (当 onStop 不存在时不会发生这种情况)。

这个想法是让 pause() 函数在用户点击任何底部导航选项卡时执行。

以我目前的结构,当用户点击底部标签时,如何让声音停止?

【问题讨论】:

  • 当您的应用程序关闭或屏幕关闭时,片段中的 MediaPlayer 不应继续播放(如果您愿意,您应该是 following the guide to building an audio playback app 以避免让 Android 终止您的媒体播放而在后台),所以onStop() 似乎正是片段的正确方法。

标签: android android-fragments android-navigation


【解决方案1】:

您可以使用“setOnNavigationItemSelectedListener()”来监听底部导航的点击。

如果用户选择了音频播放器内的项目以外的项目,则调用 stopAudioPlayer 函数

例子:-

navBottom.setOnNavigationItemSelectedListener(item -> {

       if (item.getItemId() != R.id.nav_bottom_audio_player)
          stopAudioPlayer();

       return true;
        });

【讨论】:

  • 嗨,我有几个问题。这会去哪里?在 MainActivity 中(在 MainActivity 中,我为导航组件设置了底部导航)?如果是这样,我无法访问媒体播放器所在的片段,因为它不是底部导航的一部分;它是由多个底部导航选项调用的子片段(因此在您的示例中,我无法访问 R.id.nav_bottom_audio_player)。另外,我如何从 MainActivity 访问所述子片段中的 mediaPlayer?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 2020-07-17
  • 2020-12-02
  • 2019-05-23
  • 2020-06-16
相关资源
最近更新 更多