为 Android 上的浮动按钮分配不同的操作

Assign different actions to a Floating Button on Android

我正在构建一个使用导航抽屉 Activity 的应用程序,它与 Google PlayStore 的旧版本一样具有左侧菜单:

如您所知,该设计与 FAB(FloatingActionButton)捆绑在一起:

现在,在左侧菜单中您会看到这三个片段:

我想知道,当我更改 Fragment 时,如何为 FAB 分配不同的操作?从 MainActivity 我看到有 k 但我不明白如何为它分配不同的功能,因为在更改片段时,相同的 FAB 仍然存在并执行相同的操作在这种情况下是吐司:

 binding.appBarMain.fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Toast.makeText(MainActivity.this, "Home Fragmen Visualizado", Toast.LENGTH_SHORT).show();
    }
});

想法是,如果有人可以解释或告诉我如何根据 Fragment 控制 FAB 动作。

当您创建新的导航抽屉 Activity 时,默认情况下在名为 app_bar_main.xml 的文件中 Fab 自带。

它的实现在 MainActivity 文件中。

您可以从这里更改实现,或者如果不需要 FAB,可以从这两个文件中删除代码。

此文件位于主文件之上Activity,这就是它在每个片段中显示的原因。

您可以获取由 NavHostFragment 托管的当前片段,然后决定您需要使用 fab 做什么。

binding.appBarMain.fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        final NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment); // change `nav_host_fragment` according to yours 

        if (navHostFragment != null) {
            Fragment currentFragment = navHostFragment.getChildFragmentManager().getFragments().get(0);

            if (currentFragment instanceof HomeFragment) {
                Toast.makeText(MainActivity.this, "Home Fragment", Toast.LENGTH_SHORT).show();

            } else if (currentFragment instanceof SlideshowFragment) {
                Toast.makeText(MainActivity.this, "Slideshow Fragment", Toast.LENGTH_SHORT).show();

            } else if (currentFragment instanceof GalleryFragment) {
                Toast.makeText(MainActivity.this, "Gallery Fragment", Toast.LENGTH_SHORT).show();
            }
        }

    }
});

也可以去掉这个fab,在每个fragment(HomeFragment, GalleryFragment, & SlidshowFragment)中放一个fab,单独操作。