在使用带底部导航的Android导航组件时检测选项卡更改
我目前有一个应用程序(Java),它使用带有底部导航的导航组件。每个选项卡都有一个片段 其中一个片段导航到具有音频播放器(使用媒体播放器)的辅助片段。此audi片段具有以下代码,当我返回到父片段时停止音频:在使用带底部导航的Android导航组件时检测选项卡更改,android,android-fragments,android-navigation,Android,Android Fragments,Android Navigation,我目前有一个应用程序(Java),它使用带有底部导航的导航组件。每个选项卡都有一个片段 其中一个片段导航到具有音频播放器(使用媒体播放器)的辅助片段。此audi片段具有以下代码,当我返回到父片段时停止音频: @Override public void onDestroy() { super.onDestroy(); if (mp != null) { mp.pause(); mp = null; } } 问题是,当播放音频时,我点击底部导
@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;
}
}
这解决了这个问题,但它也防止了在屏幕关闭时播放音频。(当桌面不存在时,不会发生这种情况)
其思想是当用户点击任何底部导航选项卡时,执行pause()函数
在我当前的结构中,当用户点击底部选项卡时,如何让声音停止?您可以使用“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?当你的应用程序关闭或屏幕关闭时,片段中的mediaPlayer不应继续播放(如果你需要,你应该避免Android在后台停止媒体播放),因此
onStop()
似乎正是片段的正确方法。