根据当前片段更改“浮动操作按钮”行为

时间:2016-04-20 17:44:49

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

我在MainActivity中实现了FAB的setOnClickListener(),它没有任何问题。

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

出现FAB并且其当前操作正在播放默认歌曲,该工作正常。

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

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

以同样的方式,我有另外两个片段显示一些mp3歌曲列表。通过选择那些中的mp3并单击FAB,片段应该监听该FAB操作。

基本上,FAB应该覆盖其动作并从当前片段中获取输入。

我能想到的一种方法是在调用fab.setOnClickListener时,我将检查当前的Fragment并根据它进行操作。

但问题是播放这首歌,我正在创建一个包含许多参数的Intent并调用startservice。

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

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

1 个答案:

答案 0 :(得分:0)

我尝试了以下方式并且工作正常。将其添加为我的问题的答案,因为它正在运作。

方法:

在媒体假设播放的所有片段中实现了一个具有通用名称playAudio()的函数。在MainActivity中,onClick()浮动操作按钮,我正在检查当前片段的实例。如果它是4个中的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.
                    }
                }

这种方式对每个片段的工作方式都不同。

希望这会有所帮助。