1

私は問題に直面しています。うまくいけば、あなたが私を修正するのを手伝ってくれるでしょう。私の Android アプリでは、通常の方法 ( Snackbar.make().show()) を使用してスナックバーを表示します。ただし、構成の変更 (縦向きから横向きへの向きの変更など) にも対処する必要があります。

構成が変更されると、Snackbar が消えますが、これは予想外のことです。ProgressDialog と AlertDialog で同じ問題が発生しましたが、DialogFragment のカスタム サブクラスを使用して解決しました。

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

ただし、Snackbar は、ProgressDialog などの Context ではなく View にアタッチされているため、異なるようです (getDialog()私の DialogFragment では new を使用できますProgressDialog(getActivity()))。

では、構成の変更後、いつ、どのように Snackbar を表示すればよいのでしょうか? Fragment を使用していますか、それとも、Activity にプライベート変数をいくつか用意して、これを回避する必要がありsavedInstanceStateますか?

4

1 に答える 1

2

適切な回答が提供されず、締め切りに間に合わなければならなかったため、次の解決策を採用しました。

  • AppCompatAcitity を拡張し、すべてのアクティビティが継承するアクティビティ基本クラスを作成します
  • アクティビティ基本クラスで、Snackbar に関する情報を格納するインスタンス変数の束を作成します (isShowing、識別子、メッセージ、アクション、引数)
  • アクティビティの基本クラスで、スナックバーを表示するメソッドを作成し、前述のすべての変数を指定します
  • アクティビティ基本クラスで、onSaveInstanceState と onRestoreInstanceState を使用して、前述の変数を保存/復元します。
  • 構成変更前にスナックバーが表示されていた場合、ブール値は保存および復元され、それを使用して、アクティビティ基本クラスの onRestore() で同じ構成を持つ新しいスナックバーを作成できます。
  • スナックバーを作成するときは、snackbar.setCallback() を使用してコールバックを設定し、スナックバーが閉じられたかどうかを確認し、そうであれば isShowing を false に変更します
  • スナックバーを設定するとき、どのスナックバーがクリックされたかを確認するための引数として以前に提供した識別子を使用して、Activiy 基本クラスでメソッドを呼び出すアクションを設定しました
于 2016-11-01T04:11:36.230 に答える