2

newIstance()が使用されている場合を除いて、このコードのほとんどすべてを理解しています。誰か説明してもらえますか?とても有難い。

public class DateDialogFragment extends DialogFragment {

public static String TAG = "DateDialogFragment";

static Context sContext;
static Calendar sDate;
static DateDialogFragmentListener sListener;

public static DateDialogFragment newInstance(Context context, int titleResource, Calendar date){
    DateDialogFragment dialog  = new DateDialogFragment();

sContext = context;
    sDate = date;

Bundle args = new Bundle();
args.putInt("title", titleResource);
dialog.setArguments(args);
return dialog;
   }
}

私は編集を行いましたが、静的な場合は動作が異なると思います。それが私が混乱している理由だと思います。静的な場合、メソッドはどのように変更されますか?コンストラクターでそれをしない理由がよくわかりませんか?

4

1 に答える 1

2

フラグメント(拡張するクラスFragment)を使用する場合、データを渡す必要があることがよくあります。setArgumentsこれは、を受け取るメソッドを使用することによって実現されBundleます。これを行うには多くのコード(バンドルの作成、キー名の考慮など)が必要になるため、データを静的メソッド(通常はnewInstance)に渡すのが一般的です。そのメソッドのアイデアは、引数バンドルを作成し、それをFragment;に渡すことです。次にフラグメントを返し、好きな場所に配置できます。

このようにフラグメントを使用するもう1つの利点は、フラグメントをXMLレイアウトに直接挿入する場合、空のコンストラクターが存在する必要があることです(または何も存在しない必要があります)。(必要なデータを渡すために)コンストラクターを使用してフラグメントを作成すると、空のコンストラクターが見つからないというエラーが発生する可能性があります。

于 2012-06-02T01:55:01.913 に答える