43

こんにちは、Android サイトで次の Fragments の例を見ていました。

http://developer.android.com/guide/components/fragments.html#例

特定のメソッドが実行される理由を知りたいです。

たとえば、detailsFragment次のメソッドが実行されるのはなぜですか。

public static DetailsFragment newInstance(int index) {
    DetailsFragment f = new DetailsFragment();

    // Supply index input as an argument.
    Bundle args = new Bundle();
    args.putInt("index", index);
    f.setArguments(args);

    return f;
}

DetailsFragment単純に をインスタンス化し、代わりにsetter メソッドを使用して設定することもできませんかindex。全体をバイパスしますsetArguments

setArgumentsそもそも使う意味って何?セッターとゲッターだけを使用することはできませんか?

4

4 に答える 4

40

ゲッターとセッターを使用できますが、バンドルを渡すことで、そのコードが既に存在するため、そのコードを記述する必要はありません。また、画面の向きが変わると、これらの引数が自動的に再度渡されると思います。これにより、作業も楽になります。

基本的に、setArguments と getArguments は、Google が推奨するデザイン パターンにすぎません。

すべてのフラグメントには空のコンストラクターが必要であるため、アクティビティの状態を復元するときにインスタンス化できます。フラグメントが再インスタンス化されるときにこれらのコンストラクターが呼び出されないため、サブクラスにパラメーターを持つ他のコンストラクターを持たないことを強くお勧めします。代わりに、呼び出し元が setArguments(Bundle) を使用して引数を指定し、後で Fragment が getArguments() を使用して取得できます。 http://developer.android.com/reference/android/app/Fragment.html

Fragment が動作するために必要なセッターも含まれていると思います。繰り返しになりますが、この方法を強制するものは何もありません。ご存知のように、これが唯一の方法ではありません。

于 2012-07-09T14:33:45.170 に答える
25

マシューの答えに追加するだけです。彼は、必要に応じてフレームワークがフラグメントを再インスタンス化できるように、フラグメントには空のコンストラクターが必要であると正しく引用しました。

getter と setter を使用しても問題ありませんが、フレームワークが Fragment を破棄して再作成する可能性があるため、これらのパラメーターを失わないようにする必要があります。

これは 経由で行う必要がありますFragment.onSaveInstanceState()。保存されたステートメントsavedInstanceStateFragment.onCreate()Fragment.onCreateView()および他のいくつかのメソッドでパラメータとして返されます。

を使用Fragment.setArguments()する方が簡単です (ほとんどの場合、私は推測します)。フレームワークで引数が自動的に保存されるため、ほとんどの作業が行われます。

セッターは、最初に Fragment に指定し、フラグメントが時間の経過とともにそれ自体を調整する可能性のあるパラメーターを取得する方法になる場合があります。この場合、savedInstanceState と引数を処理するよりも、savedInstanceState だけを処理する方が簡単な場合があります。有効なパラメーターを決定する必要があります。

于 2013-02-18T06:51:53.217 に答える