3

私は1つのアクティビティと2つのフラグメントを持っています。その後、私は活動の火listener.receivePreview(obj)にしたいJavaの複数のクラスで1つのインターフェイスを使用するには?

  1. は実行します。OneFragment - > receivePreview。
  2. 実行:TwoFragment - > receivePreview。
public class MainAct extends AppCompatActivity { 
    public interface OnReceiveListener { 
     // This can be any number of events to be sent to the activity 
     void receivePreview(Object... obj); 
    } 
    private OnReceiveListener listener; 


} 

public class OneFragment extends Fragment implements OnReceiveListener{ 

    @Override 
    public void receivePreview(Object... obj) { 

    } 
} 

public class TwoFragment extends Fragment implements OnReceiveListener{ 

    @Override 
    public void receivePreview(Object... obj) { 

    } 
} 
+0

もう少し明確に説明することができますか、正確に何を達成したいですか?また、単一のインターフェースが必要な場合は、なぜそれを両方のフラグメントに実装していますか? –

+1

greenbotsイベントバスライブラリを試してくださいhttp://www.andreas-schrade.de/2015/11/28/android-how-to-use-the-greenrobot-eventbus/ –

答えて

2

次の方法の書き込みを呼び出すときにインターフェイスインスタンス

public OnReceiveListener getListener() { 
    mListener = this; 
    return mListener 
} 

とあなたの活動のを返す各フラグメント内の1つの関数を作成してみてください私はあなたが使用できると思いますオブザーバーパターンそれはですあなたの状況で良い練習。

のGoFで説明したように:

「一つのオブジェクトの状態が変化したときに、そのすべての扶養家族が自動的に通知され、更新されるように、オブジェクト間の1対多の依存関係を定義します」。あなたの状況ではhttp://www.java2blog.com/2013/02/observer-design-pattern-in-java.html#TLio7G2ruqxvfZUR.99

でより

読むイベントはあなたが認識してその2つのフラグメントにしたい活動で発生したとき、あなたは(1対多)、このような関係を持っています。

enter image description here

フラグメントはオブザーバークラスを実装していると、上図で示してあなたの活動は、被験者の役割を担っています。

これは、コードを非常にうまく実装するのに役立ちます。 いくつかのチュートリアルでは、以下のリンクで見つけることができます。

https://dzone.com/articles/observer-pattern-java http://www.tutorialspoint.com/design_pattern/observer_pattern.htm

編集:与えられた状況で:私は変更されませんので、

public interface OnReceiveListener { // this is your observer interface ! 
     // This can be any number of events to be sent to the activity 
     void receivePreview(Object... obj); 
    } 

フラグメントは、このデザインパターンとの正しい定義していますコード:

public class OneFragment extends Fragment Implements OnReceiveListener {

@Override 
public void receivePreview(Object... obj) { 

} 

}

public class TwoFragment extends Fragment implements OnReceiveListener{ 

@Override 
public void receivePreview(Object... obj) { 

} 

ます(オブザーバーとして)活動のフラグメントへの参照を持っている必要があります。

ArrayList<OnReceiveListener> observers = new ArrayList< OnReceiveListener>(); 

実際に観察者は、断片が活性を参照(より良い使用するシングルトンパターンを保持する(購読または被験者に自身を登録することができる:D)のように:。

public class MainAct extends AppCompatActivity { 
private static MainAct instance; 

public static MainAct getInstance() { 
if(instance != null) 
    return instance; 
} 

// I think it is better to create the instance variable in the onCreate() method of the MainAct activity 

onCreate(...) 
{ 
. 
. 
. 
instance = this; 
... 
} 

public void registerObserver(OnReceiveListener observer){ 
observers.add(observer) 

} 

notifyObservers(){ 
// call this method in the listener you want 

for(Observer obser : observers) 
    obser. receivePreview(param) 

} 
... 

//でフラグメントの初期化:。 MainAct.getInstance()registerObserver(この)

+1

私はあなたの評価に同意します。これがどのように与えられた状況で使用できるかの例。 – cyroxis

+0

私はあなたに同意する、私はデザインパターンが適切な状況で使用されるべきであると思う。最初はデザインパターンが何であるのか、なぜそれを使うのかを知る必要があります。この状況では十分にはっきりしていますが、適切な例を与えるために私の答えを編集します。 – Sir1

+1

ありがとう、いいアイデアだった。 –

1

あなたがコード

fragmentInstance.getListener().receivePreview(); 
2

私は答えSirvan Paraste .ITこの便利な解決策と思われるを使用

関連する問題