Androidのアプリケーションのようなウィザードを作成する
-
06-07-2019 - |
質問
Androidプラットフォームで、アプリケーションのようなウィザード(次へボタンと戻るボタンで画面間を移動でき、各画面に状態データを保存する必要がある)を行う最良の方法は何だと思いますか。
私は主に2つのアプローチで考えることができます:
-
各画面に1つのアクティビティ+ビューを設定し、各アクティビティを呼び出して画面を切り替えます。これが素晴らしいのは、システムの戻るボタンをバックハンドラとして使用できることと、各アクティビティがそれ自体の状態を保存するので、自分でそれを処理する必要がないことです。
-
1つのアクティビティと多くのビューを持ち、各画面でビューを切り替えるものを変更すると、より多くのコードを再利用できますが、状態を保存するのは面倒です。
あなたはどう思いますか? Androidでこれを行う最善の方法はどれですか?
解決
アクティビティとビューの目的に合った2にすることをお勧めします。この場合の状態の保存は簡単です。MVCパターンを使用すると、ビューに渡されるモデルオブジェクトを簡単に保持できます。各ビューには、読み取り/書き込みが可能なモデルの部分があります。どこにいても、モデルは常に現在の状態になっている必要があります。破棄された場合は、モデルを保存してください。各ページを表示するときにモデルからすでに読み取りを行っているため、復元は自動的に機能します。
他のヒント
ウィザードのようなアクティビティの作成に使用できるAndroidのViewPagerの上に構築された軽量のAndroidライブラリを開発しました。確認してください: WizarDroid 。
より自然に思えるので、私は最初のアプローチに行きました。別のアプリは、ビューの切り替えに ViewFlipper
を使用しますが、それはウィザードのようなものとはほど遠いです。
2の方が良いと思います。各「ページ」を入れますビューで表示してから、表示と非表示を交互に切り替えます。素敵なトランジションを行うのが簡単になります。どのような状態を維持することを考えていますか?自動的に機能しないのはフォーカスのみで、ページを切り替えるたびにリセットする必要があると思います。それがあなたのアプリにとって正しい振る舞いだと思うなら、それを取り戻すのも簡単です。
1を使用すると、ほとんどすべてのコードを再利用できます(独自のWizardBaseクラスを定義するだけです)が、ビューを切り替えるよりもアクティビティの起動がはるかに遅い(そしてより多くのメモリが必要)と思います。
9年前、これは明らかに非常に異なる魚のケトルでしたが、今これを行う最善の方法はフラグメントを使用することだと思います。
ウィザードの各「ページ」にフラグメントを用意し、独自のライフサイクルと状態を処理できるようにします。
Fragment.getFragmentManager( )-これにより、親アクティビティからFragmentManagerが返され、フラグメント自体を置き換えることができます。