149

私は現在Androidアプリを作成しています.ActivityとFragmentの間で日付を渡したいです。私のアクティビティには、フラグメントを開くボタンがあります: DatePickerFragment.

私のアクティビティでは、フラグメントで変更したい日付を表示しています。したがって、日付を日付ピッカーに渡し、アクティビティに送り返したいと思います。

私は多くの解決策を試しましたが、どれも機能していません。簡単な方法は引数を渡すことですが、これはフラグメントではできません。

4

9 に答える 9

230

フラグメントに情報を渡すには、フラグメントの作成時に Arguments を設定します。この引数は、後でフラグメントのメソッド onCreate または onCreateView で取得できます。

フラグメントの newInstance 関数に、送信する引数を追加します。

/**
 * Create a new instance of DetailsFragment, initialized to
 * show the text at 'index'.
 */
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;
}

次に、メソッドのフラグメント内で、onCreateまたはonCreateView次のように引数を取得できます。

Bundle args = getArguments();
int index = args.getInt("index", 0);

フラグメントからアクティビティ (データの送信または非送信) と通信したい場合は、インターフェイスを使用する必要があります。これを行う方法は、フラグメント間の通信のドキュメントチュートリアルで非常によく説明されています。すべてのフラグメントはアクティビティを介して相互に通信するため、このチュートリアルでは、実際のフラグメントからアクティビティ コンテナーにデータを送信して、このデータをアクティビティで使用したり、アクティビティに含まれる別のフラグメントに送信したりする方法を確認できます。

ドキュメンテーション チュートリアル:

http://developer.android.com/training/basics/fragments/communicating.html

于 2013-07-02T22:16:12.973 に答える
96

Activityからへのデータの送信Fragment

アクティビティ:

Bundle bundle = new Bundle();
String myMessage = "Stackoverflow is cool!";
bundle.putString("message", myMessage );
FragmentClass fragInfo = new FragmentClass();
fragInfo.setArguments(bundle);
transaction.replace(R.id.fragment_single, fragInfo);
transaction.commit();

断片:

値をフラグメントで読み取る

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    String myValue = this.getArguments().getString("message");
    ...
    ...
    ...
}

ただし、Fragment から Activity に値を送信する場合は、jpardogo の回答を読んでください。インターフェイスが必要です。詳細: Communicating with other Fragments

于 2014-01-13T23:17:07.707 に答える
6

ライブラリ EventBus を使用して、変数を含む可能性のあるイベントをやり取りします。アクティビティとフラグメントを疎結合に保つため、これは優れたソリューションです。

https://github.com/greenrobot/EventBus

于 2013-07-02T21:52:38.460 に答える