2016-07-27 3 views
-2

タブレイアウト内で、アクティビティからフラグメントへの変数を渡す必要があります。私は、タブレイアウトの初期化メソッドによって引数バンドルをフラグメントに渡す方法が2つあることがわかりました。引数bundleをフラグメントに渡す

  1. 静的な方法を作成し、詳細を提供することによって。
  2. FragmentPagerAdapter

内部フラグメントのインスタンスを作成する。しかし、私はこれがどのように機能するかいくつかの疑問を持っています。

私はこれを作成した場合、これは次のとおりです。

ここ
public class SectionsPagerAdapter extends FragmentPagerAdapter { 
    MyFragment myFragment; 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 

     myFragment = new MyFragment(); 
     Bundle args = new Bundle(); 
     args.putString("id", id); 
     myFragment.setArguments(args); 
    } 

    // ... 
} 

私はフラグメントのインスタンスを作成し、その引数のあとがきを設定しています。

そして、私はnewInstance()方法でこのような何か、それを作成した場合:

public static MyFragment newInstance(String id) { 
    MyFragment myFragment = new MyFragment(); 
    Bundle args = new Bundle(); 
    args.putString("id", id); 
    myFragment.setArguments(args); 

    return myFragment; 
} 

をいくつかの疑問:onCreate()またはonCreateView()

  1. と呼ばれるのでしょうか?アフターラインnew MyFragment()以降で、バンドルを設定する前にはどうなりますか?

  2. getArgumentsがnullを返す可能性はありますか?

  3. 私は同じことをやっています。 new MyFragment()の呼び出し後にargsを設定します。どのくらい遅れて議論を立てることができますか? new MyFragment()コールの後に引数を正確に設定する必要がありますか?

申し訳ありませんが、私はいくつかの愚かな質問をしました。しかし、私はFragmentsには新しいです。ありがとう:)

+0

引数を2回設定する必要はありません。 'newInstance'を使用してフラグメントをインスタンス化します:' myFragment = MyFragment.newInstance(id); ' –

+0

@bigdestroyer引数を2回設定しません。私は、器械で断片を初期化する良い方法は何かを尋ねています – kirtan403

+0

ああ、申し訳ありません。次に、静的メソッドの方法を使用する必要があります。 –

答えて

1

onCreate()とonCreateView()は、フラグメントトランザクションをコミットした後にいつか呼び出されます。つまりcommit()と呼ばれます。そしてあなたはそれの前にバンドルを設定します。

コミットする前にバンドルを設定している限り、getArgumentsはnullにはなりません。

どちらも同じことをしています。最初に、フラグメントインスタンスを自分で作成し、バンドルを自分で設定します。 2番目では、ファクトリメソッド(Effective Java Item 2)を使用しています。これは、フラグメントによって管理されます。したがって、引数が常に設定されているので、2番目に間違いを覚えるのは難しいです。

+0

こんにちは。入力いただきありがとうございます。本当に役に立ちます。私は 'FragmentPagerAdapter'でそれを使用しています。したがって、 'FragmentPagerAdapter'がいつフラグメントをコミットするかわからないので、NewInstanceで作成すると便利でしょうか? – kirtan403

+0

次の例を参照してください。https://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html Fragmentを返すgetItemメソッドが呼び出された後でトランザクションがコミットされます。SectionsPagerAdapterのコンストラクタでフラグメントを作成しているので、いずれの方法でも動作するはずです。しかし、newInstanceを使用するとエラーが発生しにくくなります。また、例のようにコンストラクタではなくgetItemでフラグメントをインスタンス化します。 – gitter

+0

私はほとんどの問題を理解しました!ありがとう – kirtan403