首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

活动重新创建前未显示Android SnackBar

是指在Android应用程序中,当活动(Activity)被销毁并重新创建时,之前未显示的SnackBar无法正常显示的问题。

SnackBar是一种轻量级的通知组件,用于向用户显示短暂的消息或操作结果。它通常以底部弹出的方式展示,提供简洁的提示信息和操作按钮,以增强用户体验。

活动的重新创建可能发生在屏幕旋转、内存不足、配置更改等情况下。在这些情况下,活动会被销毁并重新创建,以适应新的环境或配置。然而,由于SnackBar是与活动相关联的,当活动被销毁后,之前未显示的SnackBar实例也会随之销毁,导致无法显示。

为了解决这个问题,我们可以在活动的生命周期方法中保存SnackBar实例的状态,并在活动重新创建后重新显示它。

具体的解决方案如下:

  1. 在活动的onSaveInstanceState方法中保存SnackBar的状态,将其相关信息(如文本内容、持续时间、操作按钮等)存储在Bundle中。
  2. 在活动的onRestoreInstanceState方法中恢复SnackBar的状态,从Bundle中获取之前保存的信息。
  3. 在活动的onCreate方法中根据恢复的SnackBar状态重新创建SnackBar实例,并显示出来。

以下是一个示例代码:

代码语言:txt
复制
public class MainActivity extends AppCompatActivity {

    private static final String SNACKBAR_TEXT_KEY = "snackbar_text";
    private static final String SNACKBAR_DURATION_KEY = "snackbar_duration";
    // 其他保存的SnackBar状态信息

    private Snackbar snackbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState != null) {
            // 从Bundle中恢复SnackBar状态信息
            String snackbarText = savedInstanceState.getString(SNACKBAR_TEXT_KEY);
            int snackbarDuration = savedInstanceState.getInt(SNACKBAR_DURATION_KEY);
            // 恢复其他保存的SnackBar状态信息

            // 重新创建SnackBar实例
            snackbar = Snackbar.make(findViewById(android.R.id.content), snackbarText, snackbarDuration);
            // 设置其他属性和操作按钮等
        }

        // 显示SnackBar
        if (snackbar != null) {
            snackbar.show();
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        if (snackbar != null) {
            // 保存SnackBar状态信息到Bundle中
            outState.putString(SNACKBAR_TEXT_KEY, snackbar.getText().toString());
            outState.putInt(SNACKBAR_DURATION_KEY, snackbar.getDuration());
            // 保存其他SnackBar状态信息
        }
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);

        // 恢复SnackBar的状态信息
        // 注意:SnackBar的实例会在onCreate方法中重新创建
    }
}

通过以上代码,我们可以解决活动重新创建前未显示Android SnackBar的问题。同时,腾讯云也提供了一系列与移动应用开发相关的产品和服务,可以帮助开发者快速构建高效稳定的移动应用。更多关于腾讯云移动开发产品和服务的信息,可以参考腾讯云官方文档中与移动开发相关的部分,链接地址:https://cloud.tencent.com/document/product/876

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android自定义View绘制的准备:DecorView创建 & 显示

但在绘制,系统会有一些绘制准备,即前面几个步骤:创建PhoneWindow类、DecorView类、ViewRootmpl类等 今天,我将主要讲解View绘制的准备,主要包括:DecorView创建...DecorView的创建 上面我们提到,DecorView是显示的顶层View,那么View的绘制准备从DecorView开始说起 DecorView的开始 = 我们熟悉的 setContentView...此时,顶层View(DecorView)已创建 & 添加Activity中设置的布局文件 此时,顶层View(DecorView)仍未显示出来,即不可见 ---- 2....DecorView的显示 在主线程创建时,会调用 handleResumeActivity(),具体如下: /** * 源码分析:主线程创建时,调用的handleResumeActivity()...总结 本文全面总结自定义View 绘制的准备,主要包括:DecorView创建 & 显示,具体总结如下: 工作流程机制 ? 源码分析 ?

86820
  • Material Design —Snackbars &Toasts

    Snackbar包含与所执行的操作直接相关的单行文本。 它们可能包含操作文本,但不包含icon。 Toast(仅限Android)主要用于系统消息传递。 它们也显示在屏幕的底部,但不能从屏幕中滑走。...用法 一次只能显示一个snackbar。 每个snackbar可能包含一个单独的操作,但不会是“关闭”或“取消”。 行为 Snackbars激活后从屏幕的底部向上滑出。...---- 用法 一次只能在屏幕上显示一个Snackbar。 位置 Snackbars出现在屏幕上的大多数元素的上方,与浮动操作按钮的高程相同。 但高程低于提示框,底部动作条和导航抽屉。...在Android上,当Snackbars出现时有不相关的Dialog或Popup,Snackbars超时后将在重新获得窗口焦点时重置。 这是为了确保用户能够在预期时间内阅读Snackbar。...当显示第一个Snackbar时第二个就该做准备,在第二个Snackbar开始出现第一个Snackbar应该开始向下收缩。 (今天的好短~开心~)

    1.1K60

    Toast与Snackbar的那点事

    调用service.enqueueToast(pkg, tn, mDuration)将当前Toast的显示加入到通知队列,并传递了一个tn对象,这个对象就是NMS用作回传Toast的显示状态。...Google在Android 8.0的代码提交中修复了这个问题,把8.0的源码和一版本对比可以发现,如同我们的分析,Google在消息执行处将异常catch住了。...源码中关键代码如下: // 方法签名多了一个IBinder类型的token,它是在NMS中创建的 public void handleShow(IBinder windowToken) { ......Activity,没有Activity作为上下文时,它们是无法创建显示的,并且简单的通知使用这种控件过重。...在B页面finish之前,发送A在跳转注册的广播,并把需要展示的消息使用Intent返回。

    2.4K60

    Android提醒微技巧,你真的了解Dialog、Toast和Snackbar吗?

    调用的时候也很简单,只需要把Context对象和Toast要显示的内容传进来就可以了: Util.showToast(context, "things happened"); 现在我们再重新运行一遍程序...在使用Snackbar之前,首先需要在app/build.gradle中添加相应的依赖: dependencies { compile 'com.android.support:design:23.4.0...的make()方法来创建一个Snackbar对象,make()方法的第一个参数需要传入一个view,只要是当前界面布局的任意一个view都可以,Snackbar会使用这个view来自动查找最外层的布局,...第二个参数就是Snackbar显示的内容,第三个参数是Snackbar显示的时长。这些和Toast都是类似的。...现在重新运行一下程序,效果如下图所示: ? 可以看到,Snackbar的效果有点类似于Toast,不过它是从屏幕底部弹出来的。

    1.3K80

    Toast问题深度剖析(二)

    事实上, SnackBar 就是这样的方案。不过,如果不使用系统类型的窗口,就意味着你的Toast 界面,无法在其他应用之上显示。...我们再来看下第二个”就绪”,也就是 Android 界面什么时候显示呢?相信你可能迫不及待的回答不是 onResume 回调的时候么?...而一般触发这一事件的的动作有: View 的某些属性的变更 View 重新布局Layout 增删 View 节点 当调用 WindowManager.addView 将空间添加到 WM 服务管理的时候,...最后当时序控制器 SnackBarManager 回调返回的时候,通知 SnackBar 显示,即将 SnackBar.mView 增加到 mTargetParent 控件中去。...假如你现在弹了 10 个 Toast ,每个 Toast 的显示时间是 2s 。也就是说你的最后一个 SnackBar 将被 SnackBarManager 持有至少 20s。

    4.9K124

    Android之MaterialDesign应用技术

    design,中文是设计之意,即“设想和计划,设想是目的,计划是过程安排”,通常指有目标和计划的创作行为、活动。在这个竞争激烈的数字化信息时代,企业建立自己的网站已经刻不容缓。...废话不多说,列重点 滑动删除及撤销(SwipeDismissBehavior,Snackbar) 滑动列表控制控件消失和出现 实现下滑动悬浮效果 在这之前,首先添加依赖   compile 'com.android.support...ViewCompat.animate(tv1).alpha(1).start();则是显示滑掉的内容。 Snackbar的用法,我想大家一看就能懂,这就不多说了。...2.1:创建布局文件 外层是协调者布局,中间就是一个类似于listview的RecyclerView,和一个右下角的返回顶部按钮。...比如说,toolbar在何时显示,可以选择只要是上滑就显示,也可以选择是滑到最上面的内容才显示,这个例子就是滑动到最上面的内容toolbar再显示

    1.3K90

    Android Aidl跨进程通讯(二)--异常捕获处理

    ——《微卡智享》 实现效果 跨进程捕获异常实现 微卡智享 项目Demo还是用上一篇中的Demo,文中曾提到过创建AIDL文件和数据类后,需要ReBuild一下 在aidl中使用了数据类TestData...保证这样后再重新Rebuild就不会报错了。...(e: Exception) { Snackbar.make(view, e.message.toString(), Snackbar.LENGTH_LONG)...Exception中的类型,并没有RemoteException,看到这大概就明白了,那我们修改一下抛出异常的类型,改为上面第一个异常类型SecurityException Client客户端异常捕获不用改,重新运行后...Aidl跨进程通讯的简单使用 Android BlueToothBLE入门(三)——数据的分包发送和接收(源码已更新) Android BlueToothBLE入门(二)——设备的连接和通讯(附Demo

    47020

    “吐司”测试二三事

    主要问题 : Toast作为Android轻量级反馈信息提示的系统控件,在目前项目中大量使用,但是由于Toast是系统层面提供的,不依赖于前台页面,存在滥用的风险。...为了规避这些风险,Google在Android系统版本的迭代过程中,不断进行了优化和限制。这些限制不可避免的影响到了正常的业务逻辑。...解决: 可以在Toast触发的时候增加当前是否存在Toast的判断,如果当前没有在显示的Toast,则创建Toast并展示,如果当前已经存在一个Toast,则只替换当前的文案显示。...网上提供了一种方法,将默认Toast置为空,重新写入内容,这样就不会带有应用名称,方法如下: ? 汇总以上两个问题,整合方法如下: ?...后面两个权限带来的问题,我们计划使用Snackbar的方法解决。测试过效果后,再详细给大家介绍Toast、Snackbar的优缺点。

    85720

    第14章 使用Kotlin 进行 Android 开发(1)第14章 使用Kotlin 进行 Android 开发(1)

    如果您打开项目,请在 Welcome to Android Studio 窗口中点击 Start a new Android Studio project ?...而在Activity被重新创建时,又会对我们之前保存的 Fragment 进行恢复。 所以,添加 Fragment 千万要记得去检查是否有保存的Activity状态。...添加Fragment检查是否有保存的Activity状态。 remove(Fragment fragment) 移除一个已经存在的Fragment。...hide(Fragment fragment) 显示一个以前被隐藏过的Fragment。Fragment被hide/show,仅仅是隐藏/显示Fragment的视图,不会有任何生命周期方法的调用。...attach(Fragment fragment) 重新关联一个Fragment(当这个Fragment的detach执行之后)。

    2.7K30
    领券