【问题标题】:Change 'Floating Action Button' behavior according to the current Fragment根据当前 Fragment 更改“浮动操作按钮”行为
【发布时间】:2016-08-13 13:53:15
【问题描述】:

我在 MainActivity 中实现了一个 FAB 的 setOnClickListener(),它可以正常工作。

根据导航抽屉中的选择,我有 8 个不同的片段(一个显示 WebView,另一个加载 RecyclerView 等)。

FAB 出现,其当前操作正在播放默认歌曲,运行正常。

现在,从我的 8 个不同片段中,3 个片段显示不同的歌曲列表。
由于 FAB 显示为默认值,因此我想将 FAB 用作播放按钮。

因此,如果用户在一个 Fragment 中并选择一个 mp3 并单击 FAB,它应该会播放该歌曲。
这意味着我应该以某种方式覆盖 MainActivitiy 的 setOnClickListener 与 Fragment 中实现的一个。

以同样的方式,我还有其他 2 个片段显示一些 mp3 歌曲列表。通过在其中选择一个 mp3 并单击 FAB,Fragment 应该会监听该 FAB 操作。

基本上,FAB 应该覆盖其操作并从当前 Fragment 获取输入。

我能想到的一种方法是,当fab.setOnClickListener被调用时,我会检查当前的Fragment并按照它来操作。

但问题是播放歌曲,我正在创建一个带有许多参数的 Intent 并调用 startservice。

如果我可以在 Fragment 本身中做某事,我可以在 setOnClickListener() 上创建一个 Intent、捆绑所需的参数等。

非常感谢任何解决我的困惑的建议。

【问题讨论】:

  • 把你的解决方案作为答案,而不是在问题中。

标签: android android-fragments floating-action-button fragmentmanager


【解决方案1】:

我尝试了以下方法,它工作正常。添加它作为我的问题的答案,因为它正在工作。

方法:

在媒体应该播放的所有片段中实现了一个通用名称为 playAudio() 的函数。在 MainActivity,浮动操作按钮的 onClick() 中,我正在检查当前片段的实例。如果它在 8 个中的 3 个中需要在 fab 点击时播放相应的音频,我将调用片段的 playAudio()。 对于其余的片段,做其他事情。 以下是代码片段:

    @Override
    onClick(View v) {
     Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container_body);
                if (fragment != null && fragment.isMenuVisible()) {
                    if (fragment instanceof FragmentAudioMessage) {
                        ((FragmentAudioMessage) fragment).initPlay();
                    } else {
                      //do something else.
                    }
                }

这样,每个片段的工作方式都不同。

希望这对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 1970-01-01
    • 2016-03-02
    • 2015-08-07
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    相关资源
    最近更新 更多