web-dev-qa-db-ja.com

アクティビティから、作成済みのフラグメントにデータを送信します

一部のデータを送信するFragmentの作成方法に関する情報のみが見つかりましたが、コンストラクターでのインスタンス化のみです。

しかし、フラグメントの新しいインスタンスを作成せずに、アクティビティからフラグメントにデータ(たとえば、2つのDoubleオブジェクト)を送信できるかどうかを知りたいです。

以前に作成されたフラグメント。

11
sergio

引数を受け取りたいメソッドをFragmentに追加し、Activityでメソッドを呼び出します

活動のコード:

Activity's Code

フラグメントのコード:

Fragment's Code

14
Will Tang

これを行う最も簡単な方法は、フラグメントでインターフェースを定義し、それをアクティビティ内に実装することです。このリンクは、これを実現する方法についての詳細な例を提供する必要があります。 https://developer.Android.com/training/basics/fragments/communicating.html

あなたが探している重要な部分はここにあると思います:

ArticleFragment articleFrag = (ArticleFragment)
      getSupportFragmentManager().findFragmentById(R.id.article_fragment);

if (articleFrag != null) {
    // If article frag is available, we're in two-pane layout...

    // Call a method in the ArticleFragment to update its content
    articleFrag.updateArticleView(position);
} else {
    // Otherwise, we're in the one-pane layout and must swap frags...

    // Create fragment and give it an argument for the selected article
    ArticleFragment newFragment = new ArticleFragment();
    Bundle args = new Bundle();
    args.putInt(ArticleFragment.ARG_POSITION, position);
    newFragment.setArguments(args);

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

    // Replace whatever is in the fragment_container view with this fragment,
    // and add the transaction to the back stack so the user can navigate back
    transaction.replace(R.id.fragment_container, newFragment);
    transaction.addToBackStack(null);

    // Commit the transaction
    transaction.commit();
}

まず、findFragmentById(R.id.fragment_id)を呼び出してフラグメントを取得しようとします。それがnullでない場合は、インターフェースで定義したメソッドを呼び出して、データを送信できます。

2
Zach Sogolow

以下のようなバンドルを介してデータを転送できます。

Bundle bundle = new Bundle();
bundle.putInt(key, value);
your_fragment.setArguments(bundle);

次に、フラグメントで、次のコマンドを使用してデータを取得します(例:onCreate()メソッド)。

Bundle bundle = this.getArguments();
if (bundle != null) {
        int myInt = bundle.getInt(key, defaultValue);
}
1
Karim