Android:单独片段中的多个小吃栏(ViewPager)

2023-11-24

我有一个viewpager,当然还有一些片段。这些片段中的每一个都以 CoordinatorLayout 作为父级。

我正在展示一个小吃栏。问题是,如果片段 A 显示小吃栏,那没问题,但如果它的相邻片段 B 也显示小吃栏,则片段 A 中的小吃栏会自动隐藏。

由于 viewpager 相邻片段是预加载的,因此这是一个明显的问题。有什么解决办法吗?还是我做错了?


ViewPager中多个Fragment中的snackbar存在一些问题

1) 如果snackbar显示在Fragment A(可见)和Fragment B(不可见)上,则两个snackbar都不可见。

2)如果我使用 @Override setUserVisibleHint 和 getUserVisibleHint() 的组合来根据片段可见性智能地显示和隐藏小吃栏,则它仅在第一次起作用。之后,调用 Snackbar.show() 无法再显示小吃栏(除非我重新创建小吃栏)。

以下是我建议的解决方案(使用 v23.1.1 测试):

public class SnackbarManager {
    private static final String TAG = SnackbarManager.class.getName();

    private Snackbar snackbar;
    private Create instance;
    // private boolean isMultiSnackbar;

    public interface Create {
        Snackbar create();
    }

    public SnackbarManager(Create instance) {
        // why not pass in snackbar? coz snackbar.show will fail after 1st show (it multiple snackbar), thus need to recreate it
        snackbar = instance.create();
        this.instance = instance;
    }

    public void show(Fragment fragment) {
        if (fragment.getUserVisibleHint()) {
            snackbar.show();
        }
    }

    public void onSetUserVisibleHint(boolean isVisible) {
        if (isVisible) {
            if (snackbar == null) {
                snackbar = instance.create();
            }
            snackbar.show();
            Log.d(TAG, "showSnackbar="+snackbar.isShown());
            // if snackbar.isShown()=false, if means multiple snackbar exist (might or might not be in same fragment)
            /*
            boolean isMultiSnackbar = !snackbar.isShown();
            // the following is inaccurate when I manually dismiss one of the snackbar
            // even when isShown()=true, the snackbar is not shown
            if (isMultiSnackbar) {
                snackbar = null;
                snackbar = instance.create();
                snackbar.show();
            }
             */
            }
            else {
                Log.d(TAG, "dismissSnackbar");
                snackbar.dismiss();
                // subsequent show will fail, make sure to recreate next
                snackbar = null;
            }
        }
    }
}

public class TestFragment extends Fragment {
    private SnackbarManager snackbarManager;

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (snackbarManager != null)
            snackbarManager.onSetUserVisibleHint(isVisibleToUser);
    }

    public void showSnackbar() {
        snackbarManager = new SnackbarManager(new SnackbarManager.Create() {
            @Override
            public Snackbar create() {
                Snackbar snackbar = Snackbar.make(snackbarLayout, "Create your first moment ;)", Snackbar.LENGTH_INDEFINITE);
                snackbar.setAction("Create", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        snackbarManager = null;
                    }
                });
                // enable following if not Snackbar.LENGTH_INDEFINITE
                /*
                snackbar.setCallback(new Snackbar.Callback() {
                    @Override
                    public void onDismissed(Snackbar snackbar, int event) {
                        super.onDismissed(snackbar, event);
                        snackbarManager = null;
                    }
                })
                */
                return snackbar;
            }
        });
        snackbarManager.show(this);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:单独片段中的多个小吃栏(ViewPager) 的相关文章

  • 用于多个 ContentProvider 的 CursorLoader

    我需要制作一个 ListAdapter 来显示来自多个 ContentProvider 的数据 ContentProvider 本身代表关系数据库中的一张表 我想使用 CursorLoader 系统将聚合数据检索到 ListView 中 这
  • 使用动画更新布局

    我有一个继承自 LinearLayout 的自定义视图 它包含一个按钮 和一个编辑文本 EditText 的初始可见性设置为 GONE 什么时候 按下按钮我希望 EditText 出现动画效果 所以 我制作了一个 ScaleAnimatio
  • Android 键盘调整大小

    我正在开发一个应用程序 其中包含 Activity 和Fragment 在片段布局中 我使用相对布局作为父布局 底部和滚动视图之间的一个按钮 Scrollview包含编辑文本框 如果我点击最后一个editTextBox在滚动视图中我的键盘隐
  • 在模拟器中观察短信发送应用程序

    有没有办法从模拟器读取传出的短信 在 logcat 中我看到这条消息 D SmsStorageMonitor 738 SMS send size 0 time 1327423357467 有没有办法获取接收者和内容 发出的短信似乎没有保存在
  • Cordova 插件回调使用什么线程?

    方法在哪个线程中CallbackContext https github com apache cordova android blob master framework src org apache cordova CallbackCon
  • 如何使用 Google App Engine 作为 Android 应用程序的后端数据库

    我实际上是 android 的初学者 需要很多帮助 我制作了一个带有嵌入式数据库的应用程序 现在想将其放在某个动态位置 具有简单的数据形式 一些地址和分支机构信息等 我实际上不知道如何使用放置在动态位置的动态服务器 我怎样才能做到这一点 请
  • 使用 notificationManager.getActiveNotifications() 获取状态栏通知

    我正在使用以下方式获取所有状态栏通知notificationManager getActiveNotifications 但它只是返回应用程序锁定的通知 每当在什么应用程序或任何其他应用程序中发生通知时 此功能不会向我提供其他应用程序的主动
  • 如何在 Google Analytics v4 崩溃报告中为未捕获的异常创建详细的堆栈跟踪?

    默认情况下 Google Analytics 仅在其崩溃报告中报告未捕获异常的顶行 请参阅此中的第一张图片 博客文章 http dandar3 blogspot nl 2013 03 google analytics easytracker
  • Android MediaPlayer - setDataSource 和 Release - IllegalStateException

    我编写了自己的 MediaPlayer 类来播放特定路径下的文件以及播放 asset 文件夹中的文件 这是课程 public class CMediaPlayer extends MediaPlayer public void play S
  • 如何在 Android Fragments 中添加操作栏选项菜单

    我想在其中有一个选项菜单安卓碎片 ActionBar选项菜单未显示在我的片段中 这是我的代码 我都有onCreateOptionsMenu and onOptionSelected 功能 我的代码没有显示任何错误 但选项菜单未显示 pack
  • 如何在 Android 中将 EditText 绘制到画布上?

    我想画画 EditText username new EditText context 到我画布上的特定位置 protected void onDraw Canvas canvas 是否可以在基础上画出x y在我的 Java 文件中协调而不
  • 将 Cordova console.log 写入文件

    有谁知道是否有可能console log写入文件或类似的东西 我已经记录了我的应用程序 但它仅写在控制台上 出于远程目的debugging我也需要将现有日志写入文件 我想创建一个文件并将日志写入该文件中 但这将使我复制现有的日志代码 因此
  • 如何在Android中绘制钟形曲线?

    我正在尝试在 Android 中绘制钟形曲线 正态分布 我使用这个方程 自己增加x轴并获得相对于x轴的y轴坐标 for int i 0 i lt 1000 i x float i 0 5 yy float 1 Math sqrt 0 5 M
  • 如何停止和重新启动 Android 仪器测试中的活动?

    我正在尝试编写一个停止的 Android 活动仪器测试 onPause then onStop 并重新启动当前活动 我试过 activity finish activity getActivity 但这似乎不能正常工作 测试的目的是断言表单
  • Android 上的推送通知:IBM MQTT

    我对 Android 环境非常陌生 必须使用上给出的 wmqtt jar 示例应用程序来设置客户端http www 01 ibm com support docview wss http www 01 ibm com support doc
  • Android-JNI 中的 AndEngine GLES2 存在 Proguard 问题 在应用程序中检测到错误

    我开发了一个应用程序 使用和发动机GLES2 https github com nicolasgramlich AndEngine和 andEngine 的扩展物理二维盒 https github com nicolasgramlich A
  • Android Studio 无法识别 GSON 库

    我正在 Android Studio 中制作一个应用程序 我需要使用GSON图书馆 我已经下载了gson 2 8 2 javadoc 然后我就这样走了 文件 gt 新建 gt 新模块 gt 导入 JAR AAR 打包 gt gson 2 8
  • 我的应用程序未列出用于平板电脑

    我已将一个新应用程序上传到 play google com https play google com store apps details id development nk anguide https play google com s
  • 如何从停止的地方开始播放视频

    我正在使用 VideoView 来播放视频 如果我退出应用程序 在返回应用程序 即在 onResume 中 时 它应该从停止的位置播放视频 要获取当前进度 在 onPause 中检查 long progress mVideoView get
  • 如何在 Jetpack Compose 中提供相对大小

    我有一个框布局 我想相对于父框的大小来布局子视图 这可以在 SwiftUI 中使用 Geometry Reader 来实现 如何在 Jetpack Compose 中实现类似的功能 您可以使用BoxWithConstraints代替Box

随机推荐

  • 使用 AJP / Tomcat 6.0 设置最大 HTTP 标头大小

    如果您不使用 AJP Tomcat 6 0 Connectors 有一个不错的选择maxHttpHeaderSize属性在server xml 但如果您使用 AJP 则无法理解该属性 如果您正在编写使用 AJP 的应用程序 有什么方法可以增
  • 如何 JSON 序列化 Django 模型的 __dict__ ?

    我想在 Django 中序列化单个模型的值 因为我想用get values 不可用 然而 我读到在 Google 网上论坛上您可以使用以下方式访问值 dict from django http import HttpResponse Htt
  • 从cmd调用Windows 7中的通知气球消息?

    我需要在 Windows 7 中从命令提示符使用自定义文本创建通知气球消息 我搜索了Google并找到了shell32 Notifu 是一个免费的开源 Windows 程序 它使气球出现在系统托盘中 并包含您指定的自定义文本 您可以从命令行
  • 使用内联表单中的额外字段 - save_model、save_formset,无法理解差异

    假设我处于通常的情况下 多对多关系中有额外的字段 class Person models Model name models CharField max length 128 class Group models Model name mo
  • 暂停 Shiny 中的活动安排

    我有一个应用程序 有两个observeEvent 处理程序对输入A 和输入B 做出反应并执行一些操作 事件 A 的内容之一是更新输入 B shinyApp ui fluidPage selectInput A Input A c 1 5 s
  • schema.org 的使用如何符合关联数据原则?

    我开始学习 schema org 模式 我来自 RDF OWL 社区 令我惊讶的是 我确实找不到 schema org 的 RDFS 或 OWL 词汇表示 更具体地说 我意识到这只是一个描述架构的 HTML 页面 我还找到了该架构的 RDF
  • 将第一行添加到空 data.frame 时,行号不同(NA 与 1)

    我想了解为什么这两种索引空的方法data frame导致NA分配给第一行的行号only 方法一 df lt data frame Number numeric Text character stringsAsFactors FALSE df
  • OpenXml 表错误“每个 之前都需要

    元素”

    我创建了一个 Word 模板 然后通过 OpenXML SDK 对其进行处理 以将文档的某些内容替换为数据库查询中的数据 该模板由一些基本文本组成 并在我想要替换文本的位置注入了纯文本内容控件 然后 我使用这些控件中的文本作为查找替换值的键
  • 在 C# 中获取最后 'N' 个季度

    假设当前季度是 3 年份是 2011 年 我怎样才能获得最后 5 个季度 期望的输出 Q3 2011 Q2 2011 Q1 2011 Q4 2010 Q3 2010 附加 Q 和 我正在尝试如下 int generateQuater 5 i
  • 设计和多个“用户”模型

    我正在使用 Rails 3 2 和 devise 2 0 而且我对 Rails 还很陌生 要求 我想实现以下目标 有 2 个或更多 用户 模型 例如 会员 客户 管理员 所有型号共享一些必填字段 例如电子邮件和密码 每个模型可能有一些独特的
  • 如何在 Linux 上找到包含特定文本(字符串)的所有文件?

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 如何查找文件内容中包含特定文本字符串的所有文件 以下不起作用 它似乎显示了系统中的每个文件 find type f exec
  • 如何在Delphi XE3中解析JSON对象中的指定值?

    我的 JSON 对象如下所示 destination addresses Paris France origin addresses Amsterdam Nederland rows elements distance text 504 k
  • 已收到 SOAP xml 响应但未填充响应对象

    我向供应商的基于 Java 的 Web 服务添加了 服务参考 但我无法控制该服务 我有这个简单的客户端代码 Client myClient new Client CapabilitiesType response client GetCap
  • 将 CSS flex 元素的高度设置为相同的值?

    我有 2 个彼此相邻的 div 我使用 flex 和 justify content align items 垂直和水平居中 例子 HTML div class inner div class section green img src h
  • 如何在 Laravel 分页集合中使用 Transform

    我想在 laravel 5 5 中的分页集合中使用映射或转换 但我正在努力工作 这就是我想做的但是getCollection不可用于LengthAwarePaginator正如我们在以前的 Laravel 版本中所做的那样 如何转换分页集合
  • 如何在Python中压缩文件夹和文件? [复制]

    这个问题在这里已经有答案了 我有一个名为 files 的文件夹 其中包含大量 jpg 照片 我还有一个名为 temp kml 的文件 我想创建一个 KMZ 文件 基本上是一个 zip 文件 其中包含 temp kml 文件和其中包含照片的文
  • org.postgresql.util.PSQLException:致命:抱歉,已经有太多客户端

    我正在尝试连接到 Postgresql 数据库 但收到以下错误 错误 org postgresql util PSQLException 致命 抱歉 已经有太多客户端 该错误是什么意思以及如何修复它 My server properties
  • Linux 中“系统”和“执行”之间的区别?

    有什么区别system and exec家庭命令 特别是我想知道他们中的哪一个创建子进程来工作 system 呼唤sh处理你的命令行 这样你就可以获得通配符扩展等 exec 及其朋友用新的进程映像替换当前的进程映像 With system
  • nameof() 是在编译时评估的吗?

    在 C 6 中 您可以使用nameof 运算符获取包含变量或类型名称的字符串 这是在编译时评估的 还是在运行时通过某些 Roslyn API 评估的 Yes nameof 在编译时评估 查看最新版本的规格 表达式的名称是一个常量 在所有情况
  • Android:单独片段中的多个小吃栏(ViewPager)

    我有一个viewpager 当然还有一些片段 这些片段中的每一个都以 CoordinatorLayout 作为父级 我正在展示一个小吃栏 问题是 如果片段 A 显示小吃栏 那没问题 但如果它的相邻片段 B 也显示小吃栏 则片段 A 中的小吃