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

Android 如何在Snackbar中处理配置更改?,android,configuration,orientation,snackbar,Android,Configuration,Orientation,Snackbar,我正面临一个问题,希望你能帮我解决。在我的Android应用程序中,我使用通常的方式(Snackbar.make().show())显示Snackbar。但是,我还必须处理配置更改(如从纵向到横向的方向更改) 现在,如果配置发生变化,Snackbar就会消失,这是我无法预料的。ProgressDialog和AlertDialog也有同样的问题,我通过使用DialogFragment的自定义子类解决了这个问题 我的AsyncTasks也有这个问题,我通过使用片段的自定义子类(片段的onCreate

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

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

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

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


那么,在配置更改后,何时以及如何显示Snackbar?使用片段是一种方法,还是我应该尝试通过在我的活动中使用一些私有变量来解决这个问题,我可以通过
savedInstanceState

保存/还原这些变量,因为没有提供合适的答案,我必须在最后期限前完成,所以我现在采用以下解决方案:

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