0

同じイベントを複数のフラグメントに送信するアクティビティが必要です。アクティビティで個々のフラグメントメソッドを呼び出す代わりに:、、、FragmentA.DoTask()など...アクティビティで1つのイベントのみを送信し、フラグメントでこのイベントをリッスンするようにします。FragmentB.DoTask()FragmentC.DoTask()

開発者のドキュメントでは、アクティビティをフラグメントに「リッスン」させますが、アクティビティはフラグメントのメソッドを呼び出します。逆に、フラグメントをアクティビティに「リッスン」させることは可能ですか。

ありがとう

4

2 に答える 2

1

EventBusシステムを使用できます。

RRiBbitの説明(このライブラリはAndroidとは関係ありませんが)は、それを正確に定義します。

イベントバスは、さまざまなコンポーネントがお互いを知らなくても互いに通信できるようにするメカニズムです。コンポーネントは、誰がイベントをピックアップするか、または他の何人がイベントをピックアップするかを知らなくても、イベントをイベントバスに送信できます。コンポーネントは、誰がイベントを送信したかを知らなくても、イベントバスでイベントをリッスンすることもできます。これにより、コンポーネントは相互に依存せずに通信できます。また、コンポーネントの交換も非常に簡単です。新しいコンポーネントが送受信されているイベントを理解している限り、他のコンポーネントはそれを知ることはありません。

では、ここのコンポーネントとは正確には何ですか?ええと、コンポーネントは何でもかまいません。ほとんどのイベントバスでは、それらはJavaオブジェクトです。彼らはイベントを送信し、イベントも聴きます。

Androidでは、EventBusを使用できます。

于 2016-08-17T05:37:05.127 に答える
0

私はそれを回避する方法はないと思います。ドキュメントの「聞く」という言葉は、より比喩的です。すべてのフラグメントを明示的に呼び出す必要があります。

あなたが得ることができる最も近いものは、あなたのActivityクラスで維持されているフラグメントのリストを持つことです。例:カスタマイズされたフラグメントクラスを作成します。

public class MyFragment extends Fragment{
  public abstract void doTask();
}

すべてのフラグメントをこのクラスから継承します。

public class FragmentA extends MyFragment{

  @Override
  public void doTask(){
    //exec code here

  }
}

アクティビティクラスでは、フラグメントを作成するたびに、それをリストにも追加します。イベントが発生したら、すべてのフラグメントを呼び出します。

public class MyActivity extends Activity{
  List<myFragment> mFragmentList = new ArrayList<MyFragment>();

  public void addFragment(MyFragment fragment){
    mFragmentList.add(fragment);
  }

  public void onEvent(){
    for(MyFragment fragment:mFragmentList){
      fragment.doTask();
    }
  }

}

注:フラグメントがそれほど多くない場合、このソリューションはやり過ぎになる可能性があります。

于 2012-05-30T17:52:27.990 に答える