2017-11-15 5 views
0

私は3つのボタンを持つフラグメントを持っており、少なくとも3つのアクティビティでそれを再利用したいと考えていますが、それらのボタンがそれぞれのアクティビティに対して異なることを望みます。たとえば、ActivityAでは、ActivityBにいる間にbutton1にGoogle Mapsを開き、button1には音楽プレーヤーが表示されます。これは可能でしょうか、それとも正しい方法ですか?複数のアクティビティで異なる機能を持つフラグメントを再利用できますか?

答えて

2

three_buttons.xml

three_buttons.xmlすることができますと呼ばれる部分的なレイアウトを作成します。 。例えば、FragmentCallbackと言う、目的のコールバックメソッド、onButtonClick()を使って、フラグメントのインタフェースを作成するだけです。フラグメントのonAttached()で、アクティビティを新しいインターフェイスにキャストし、変数private FragmentCallback callback;に保存します。このフラグメントを使用する各アクティビティは、このコールバックインタフェースを実装する必要があります。次に、フラグメントonButtonClick()メソッドのコールバックonButtonClick()メソッドを呼び出します。そうです、それは非常に一般的なパターンです。

+1

ありがとうございます!それは働いた。 – Alexis

1

これは可能ですか?

です。あなたは自分のFragmentインスタンスをホストしているActivityチェックすることができ:

private void button1OnClick(){ 
/* could also use instanceof, BUT: if you have something like ActivityC extends ActivityA 
     then instanceof would evaluate to true for both */ 
    if(getActivity().getClass().equals(ActivityA.class)) { 
    // do stuff 
    } else if(getActivity().getClass().equals(ActivityB.class)) { 
    // do another stuff 
    } 
} 

は、これは正しい方法ですか?

注意独断答え) それは依存します。複雑でユニークなレイアウト/機能をお持ちの場合は、別のFragmentsを使用します。 Activitiesで別々に動作する必要のあるボタンを備えた単純なレイアウトの場合は、既存のFragmentクラスを再利用することをお勧めします。

+0

ありがとうございました!私もこの方法で試してみました。 – Alexis

1

はい、可能ですが、フラグメントにさらにロジックを追加し、各アクティビティにいくつかのインターフェイスを追加する必要があります。 私はそれをすることをお勧めしません、おそらくあなたのレイアウトを再利用することができます。

0

はい、できます。

if(getActivity() instanceOf ActivityA) { 
    //do stuff related to ActivityA 
} else if(getActivity() instanceOf ActivityB) { 
    //do stuff related to ActivityB 
} 
0

あなたの活動は異なるロジックを持って、あなたはそれらのそれぞれのボタンロジックを定義し、このように意見を共有することができます。これを行うにはフラグメントを使用できますが、部分的なレイアウトを共有することで、より直接的にすることができます。

あなたはもちろん

<LinearLayout> 
<BUtton android:text="button 1"/> 
<BUtton android:text="button 2"/> 
<BUtton android:text="button 3"/> 
</LinearLayout> 

activity_a.xml

<LinearLayout> 
<TextView android:text="I am A"/> 
<include 
      android:id="@+id/three_buttons" 
      layout="@layout/three_buttons" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 
</LinearLayout> 

activity_b.xml

<LinearLayout> 
<TextView android:text="I am B"/> 
<include 
      android:id="@+id/three_buttons" 
      layout="@layout/three_buttons" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 
</LinearLayout> 
関連する問題