【问题标题】:How to handle configuration change in Snackbar?如何处理 Snackbar 中的配置更改?
【发布时间】:2017-03-03 08:39:38
【问题描述】:

我遇到了一个问题,希望您能帮我解决。在我的 Android 应用程序中,我使用通常的方式 (Snackbar.make().show()) 显示一个 Snackbar。但是,我还必须处理配置更改(例如从纵向到横向的方向更改)。

现在,如果配置发生变化,Snackbar 就会消失,这是我没想到的。我对 ProgressDialog 和 AlertDialog 有同样的问题,我通过使用 DialogFragment 的自定义子类解决了这个问题。

我的 AsyncTasks 也遇到了这个问题,我通过使用我保留的 Fragment 的自定义子类(setRetainInstance(true) in the Fragment 的onCreate())解决了这个问题,并保留了对我的 AsyncTask 的引用。在这两种情况下,每个 Fragment 都有一个 Activity 必须实现的回调接口,我在 onAttach()/onDetach() 期间设置/取消设置回调。

但是,Snackbar 似乎有所不同,因为它附加到视图而不是上下文,例如 ProgressDialog(在我的 DialogFragment 的getDialog() 中,我可以使用新的ProgressDialog(getActivity()))。

那么在配置更改后,我应该何时以及如何显示 Snackbar?是使用 Fragment 还是应该尝试通过在我的 Activity 上使用一些私有变量来解决这个问题,我通过 savedInstanceState 保存/恢复这些变量?

【问题讨论】:

    标签: android configuration orientation snackbar


    【解决方案1】:

    由于没有提供合适的答案并且我必须赶上最后期限,所以我现在采用了以下解决方案:

    • 创建一个扩展 AppCompatAcitity 的活动基类,我的所有活动都从该基类继承
    • 在activity基类中,创建一堆实例变量来存储Snackbar的信息(isShowing、标识符、消息、动作、参数)
    • 在活动基类中,创建一个显示快餐栏的方法,并为其提供前面提到的所有变量
    • 在activity基类中,使用onSaveInstanceState和onRestoreInstanceState来保存/恢复前面提到的变量
    • 如果 Snackbar 在配置更改之前显示,布尔值将被保存和恢复,我可以使用它在我的活动基类的 onRestore() 中创建一个具有相同配置的新 Snackbar
    • 创建小吃店时,我使用snackbar.setCallback() 设置回调,检查小吃店是否被关闭,如果是,我将isShowing 更改为false
    • 在设置 Snackbar 时,我将操作设置为调用我的 activiy 基类中的方法,使用我之前提供的标识符作为参数来检查单击了哪个 Snackbar

    【讨论】:

      猜你喜欢
      • 2021-06-07
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      相关资源
      最近更新 更多