10

Fragmentsのコンストラクターをオーバーロードせずに、静的なコンストラクターFragment.newInstance()を渡して使用することが(さまざまなソースで)推奨されるのはなぜBundleですか?

コンストラクターをオーバーロードするときは、デフォルトのコンストラクターを明示的に定義するだけです。それよりも、Fragment何らかの理由で再作成される場合はonSaveInstanceState()、での後続のデータ抽出で使用しますonCreate()。を使用した場合と同様の状況Fragment.newInstance()ですが、唯一の違いは、パブリックデフォルトコンストラクターを作成する必要がないことです。

私は何か間違ったことを理解していますか?どうもありがとうございます。

4

2 に答える 2

31

Fragmentsのコンストラクターをオーバーロードせずに、バンドルを渡す際に静的Fragment.newInstance()を使用することが(さまざまなソースで)推奨されるのはなぜですか?

Androidは、構成の変更(画面の回転など)時に保持されていないすべてのフラグメントを自動的に再作成し、そのために引数なしのコンストラクターを使用します。提供されたBundleビアsetArguments()はインスタンス状態の一部として保存され、新しく再作成されたフラグメントに渡されます。したがって、提案するアプローチを採用するには、3つ(ゼロ以外の引数のコンストラクターと)ではなく、1つのメソッド(ファクトリメソッド)を実装するだけで済みます。 onSaveInstanceState() onViewStateRestored()

私は何か間違ったことを理解していますか?

それがあなたのために働くならば、それのために行きなさい。お気づきのとおり、ファクトリメソッドアプローチは推奨事項であり、要件ではありません。

于 2012-07-22T17:34:09.507 に答える
4

Androidは必要なときにいつでもフラグメントを強制終了できるため、そのコンストラクターをオーバーロードしないことをお勧めします。そして、後でそれらを再作成するために、非引数コンストラクターを呼び出します。

パラメータを取得するには、getArguments()を呼び出すだけです。

getArguments().getInt("myInt", 0);

フラグメントが再作成された場合でも、引数は使用可能になります。

于 2012-07-22T17:32:49.070 に答える