2016-10-21 8 views
0

私は、うまくいけばあなたが私を助けることができる問題に直面している。私のAndroidアプリでは、通常の方法(Snackbar.make().show())を使ってSnackbarを表示します。しかし、私は設定変更(縦から横への向きの変更など)にも対処しなければなりません。Snackbarの設定変更を処理する方法は?

ここで設定が変更されると、Snackbarが消えてしまいます。これは私が期待しているものではありません。私はProgressDialogとAlertDialogで同じ問題がありました。これはDialogFragmentのカスタムサブクラスを使って解決しました。

私は、私が保持しているフラグメントのカスタムサブクラス(setRetainInstance(true)、フラグメントのonCreate())を使用して解決し、私のAsyncTaskへの参照を保持するAsyncTasksでこの問題が発生しました。どちらの場合も、各Fragmentにはアクティビティが実装するコールバックインターフェイスがあり、onAttach()/onDetach()の間にコールバックを設定/解除します。

しかし、Snackbarは、例えば、ProgressDialogのようなContextの代わりにViewに接続されているので違っているようです(ProgressDialog(getActivity())のDialogFragmentのgetDialog())。

設定変更後にいつ、どのようにスナックバーを表示するのですか?フラグメントを使用しているかどうか、またはsavedInstanceStateを介して保存/復元する私のアクティビティにいくつかのプライベート変数を持たせることでこれを回避しようとしますか?

答えて

0

もし適切な答えが設けられていないと私は間に合わなければならなかったので、私は今、以下の溶液を用いて行ってきました:

  • はAppCompatAcitityを拡張activiy基本クラスを作成し、そこからすべての私のactiviesは
  • を継承アクティビティ基本クラスでは、Snackbarに関する情報を格納するインスタンス変数を作成します(isShowing、識別子、メッセージ、アクション、引数)
  • アクティビティ基本クラスでは、スナックバーを表示するメソッドを作成し、前述の変数
  • アクティビティベースクラスでは、onSaveInstanceStateとonRestoreInstanceStateを使用して前述の変数を保存/復元します。
  • 設定変更前にスナックバーが表示されていた場合、ブール値は保存され、復元され、私のアクティビティベースクラスのonRestore()と同じコンフィグレーションで
  • snackbarを作成するときにsnackbar.setCallback()を使用してコールバックを設定し、スナップバーが閉じられたかどうかをチェックし、そうであればisShowingを偽
  • スナックバーを設定する際に、以前に引数として指定した識別子を使用して、どのSnackbarがクリックされたかを確認するために、自分のactiviy基底クラスのメソッドを呼び出すアクションを設定します。
関連する問題