【问题标题】:Assign different actions to a Floating Button on Android为 Android 上的浮动按钮分配不同的操作
【发布时间】:2021-06-14 19:04:54
【问题描述】:

我有一个正在使用 Navigation Drawer 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 操作来控制它。

【问题讨论】:

  • 如果您在特定片段中尝试实现不同的点击操作或功能,您可以从片段管理器获取当前活动片段并使用switch 或|if.. else`执行操作。

标签: java android android-fragments floating-action-button android-architecture-components


【解决方案1】:

您可以获取NavHostFragment 托管的当前片段,然后决定您需要对晶圆厂做什么。

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,并在每个片段(HomeFragment、GalleryFragment 和 SlidshowFragment)中放置一个 fab 以单独操作。

【讨论】:

  • 谢谢,这是我需要的
【解决方案2】:

创建新的Navigation Drawer Activity时,默认在名为app_bar_main.xml的文件中Fab自带。

它的实现在 MainActivity 文件中。

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

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

【讨论】:

  • 是的,我知道,但我不知道在更改片段时如何更改实现。示例:我在 homefragment 的 mainactivity 中,我用 galleryfragment 更改了片段,那么我如何用 fab 显示不同的吐司?...
  • 为此,您需要在片段中访问 FAB,然后添加自己的实现..,或者您可以创建一些接口来捕获当前片段中的点击...。或者引入一些全局变量从每个片段都将用于此目的...,但访问 FAB 是最推荐的方式...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 2019-04-23
  • 1970-01-01
  • 2023-03-15
  • 2015-12-05
  • 2015-07-19
相关资源
最近更新 更多