如何在Snackbar中处理配置更改?

时间:2016-10-21 06:30:50

标签: android configuration orientation snackbar

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

由于没有提供合适的答案且我必须在截止日期前完成,我现在采用以下解决方案:

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