2012-07-22 4 views
9

それはFragment秒のコンストラクタをオーバーロードが、それにBundleを渡すと、静的Fragment.newInstance()を使用しない(異なるソース)を推奨されるのはなぜですか。Fragment.newInstance()のVC onSaveInstanceState()

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

何か間違っていますか?どうもありがとうございました。

答えて

27

は、なぜそれがフラグメントのコンストラクタをオーバーロードが、それにバンドルを渡すと静的Fragment.newInstance()を使用しない(異なるソース)をお勧めしますか?

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

私は何か間違っていますか?

あなたのために働く場合は、それを行ってください。あなたが注意するように、ファクトリメソッドのアプローチは推奨事項であり、要件ではありません。

+0

あなたの答えの 'onRestoreInstanceState()'は実際に 'onViewStateRestored()'であってはなりませんか? –

+0

@ChristopherPickslay:あなたは間違いなしです。私はおそらく、 'onRestoreInstanceState()'メソッドのアクティビティを考えていました。私は答えを修正しました。ありがとう! – CommonsWare

+0

静的ファクトリメソッドと同じ方法で 'setArguments'を呼び出すオーバーロードされたコンストラクタはどうでしょうか?それは単に人々がコンストラクタから期待するものではないからですか? – Joffrey

4

Androidはあなたのフラグメントを必要に応じて強制終了できるので、そのコンストラクタを過負荷にしない方が良い考えです。そして後でそれらを再作成するために、引数のないコンストラクタを呼び出します。

パラメタを取得するには、getArguments()を呼び出します。

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

フラグメントは、フラグメントが再作成されても使用できます。

関連する問題