0

フラグメントとそのアクティビティ間の通信に関する多くの回答を見つけましたが、それは常にフラグメントとそれ自体のアクティビティ間の通信の説明でした。異なるアクティビティのフラグメント間で通信する方法の説明が見つかりませんでした。

次のシナリオが あります。項目のリストを持つ ItemsFragment を含む ItemsActivity があります。ユーザーがアイテムをスクロールし、アイテムをクリックします。その後、ItemsFragment は、新しいアクティビティのインスタンスを作成します: DetailActivity は、アイテムの詳細ビューが実装されている DetailFragment を含みます。ユーザーがアイテムのデータを変更し、クリックして戻る (または保存ボタンに移動する)。変更されたアイテムのデータが保存され、DetailActivity が破棄され、バック スタックから削除されます。ユーザーは、アイテムのリストを含む ItemsActivity/ItemsFragment に戻ります。

質問: DetailFragment は、アイテムが変更されたことを ItemsFragment に通知する必要があるため、ItemsFragment はアイテム リストのビューを更新する必要があります。問題は、DetailFragment が別のアクティビティ (ItemsActivity) の ItemsFragment について何も知らないことです。DetailFragment から ItemsActivity の ItemsFragment に通知する方法、そのアイテムが変更され、リスト内のアイテムのビューを更新する必要がありますか?

4

2 に答える 2

1

Software Sainath のコメントのおかげで、LocalBroadcastManagerを使用して 2 つのフラグメント間の通信を解決しました。ここに 記載。LocalBroadcastManager の非常に便利な使用例はこちらです。

于 2013-10-12T17:34:32.160 に答える
-1

私はこの回答からこのコードを盗みました: Sending data back to the Main Activity in android .

startActivityForResult() を使用して、ItemsActivity から DetailsActivity を開始します。

DetailsActivity で、適切な情報を返すように結果を設定します。すべての情報をディスクに保存しているように見えるので、これは単に、ディスクから読み取って更新する必要があるアイテムを特定する何らかの方法である可能性があります。または、代わりに、アイテムの更新に必要なすべての情報を返すこともできます。resultIntent.putExtra() を使用して、送り返したい情報を ItemsActivity に添付します。

新しいデータを保存し、アイテムを ItemsActivity に戻してアイテムを更新する場合は、次のようにします。

Intent resultIntent = new Intent();
// TODO Add extras or a data URI to this intent as appropriate.
setResult(ItemsActivity.RESULT_CHANGED, resultIntent);
finish();

ItemsActivity の onActivityResult() メソッドをオーバーライドします。以下では、「requestCode」は、リクエストされたものを識別するために startActivityForResult() に入れられる整数です。「resultCode」は setResult() に入れるものです。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  switch(requestCode) {
    case (MY_CHILD_ACTIVITY) : {
      if (resultCode == ItemsActivity.RESULT_CHANGED) {
        // TODO Extract the data returned from the DetailsActivity and update item 
      }
      break;
    } 
  }
}

このコードは、定数 RESULT_CHANGED が ItemsActivity で定義されていることを前提としています。「requestCode」は、結果がどこから来ているかを識別するために使用する startActivityForResult() に渡される int です。

于 2013-10-11T21:14:13.533 に答える