1

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

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

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

但是,Snackbar 似乎有所不同,因为它附加到 View 而不是 Context ,例如 ProgressDialog (在getDialog()我的 DialogFragment 中我可以使用 new ProgressDialog(getActivity()))。

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

4

1 回答 1

2

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

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