2017-05-01 22 views
0

私は1つのアクティビティと3つのフラグメントを持っています。アプリケーションが起動し、フラグメント1が表示されます。私はボタンをクリックします。フラグメントは、以下のインタフェースを介しての活動と通信し、フラグメント2起動:複数のフラグメントを1つのインターフェイスで管理する

public OnClickedListener listener; 

static interface OnClickedListener{ 
    public void buttonClicked(View v); 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 

    Activity a; 

    if (context instanceof Activity){ 
     a=(Activity) context; 
     this.listener = (OnClickedListener)a; 
    } 
} 

を...

playBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.buttonClicked(v); } });

マイMainActivityがFragment1.OnClickedListenerを実装し、データを受信して​​、起動断片2

今私はフラグメント2になっています。ボタンをクリックしてフラグメント3を起動したいと思います。フラグメント2にもう1つのインターフェイスを実装して、それを実行することができます「Hey Launch Fragment 3」と言ってください。だから今私の活動は、すべての罰金ですが、のは、私は20個の断片を持っているとしましょう。この

MainActivity implements Fragment1.OnClickedListener,Fragment2.OnClickedListener

のように見えます。主な活動では20のインターフェースを実装したくありません。単一のインタフェースを作成して使用して、個々のフラグメントとアクティビティの間で通信する方法はありますか?それはどのように実装されますか?ありがとうございました。

答えて

0

できます。唯一のインターフェイスを作成します(私はあなたが別のファイルにそれを作成することをお勧めします):あなたのActivityあなたは意志では

playBtn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // You can't use just "this", pass the class instance. 
     listener.buttonClicked(MyFragmentClassName.this, v); 
    } 
}); 

interface OnClickedListener { 
    void buttonClicked(Fragment fragment, View v); 
} 

onButtonClicked()方法もButtonがクリックされたFragmentインスタンスを受け入れますあります:

public class MainActivity extends Activity implements MainActivity.OnClickedListener { 
    @Override 
    public void buttonClicked(Fragment fragment, View v) { 
     // Check if the Fragment instance, or tag, or the info that you use to recognize it. 
    } 
} 
+0

私は少し混乱しています。 OnClickedListenerという別のインターフェイスを作成しました。私はこれをFragment1で拡張し、ボタンがクリックされたときにデータを取得できるようになりました:listener.buttonClicked(MyFragmentClassName.this、v);私は今それを私の主な活動にどのようにしていますか?上記のように、私の主な活動は次のようになるはずです:public class MainActivity extends Activity MainActivity.OnClickedListenerを実装しています。ここであなたが実装しているものがわからないのですか? –

+0

@mikhailは言ったように、インターフェイスを別のファイルに宣言するか、MainActivityにネストします。 –

0

ネストされたインターフェイスをアクティビティまたはネストされたインターフェイスではなく別のファイルで作成します断片の中で。

関連する問題