Disons que j'ai un fragment qui a trois boutons et que je veux le réutiliser pour au moins trois activités, mais je veux que ces boutons fassent des choses différentes pour chaque activité. Par exemple, dans ActivityA, je veux que button1 ouvre Google Maps tandis que dans ActivityB, button1 accède au lecteur de musique. Est-ce possible ou même la bonne manière?

0
Alexis 16 nov. 2017 à 02:11

5 réponses

Meilleure réponse

Bien sûr vous pouvez. Créez simplement une interface pour le fragment, disons FragmentCallback, avec la méthode de rappel souhaitée, onButtonClick() par exemple. Dans le onAttached() de votre fragment, transtypez l'activité vers votre nouvelle interface et stockez-la dans une variable private FragmentCallback callback;. Chaque activité utilisant ce fragment doit implémenter cette interface de rappel. Appelez ensuite la méthode callbacks onButtonClick() dans votre méthode Fragments onButtonClick(). Voilà - un modèle très courant.

3
cybergen 15 nov. 2017 à 23:37

Est-ce possible?

C'est définitivement. Vous pouvez simplement vérifier quel Activity héberge votre instance Fragment:

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
   }
}

Est-ce la bonne façon?

( réponse basée sur l'attention ) Ça dépend. Si vous avez une disposition / fonctionnalité complexe et unique, j'utiliserais un Fragments différent. Si vous avez une mise en page simple avec des boutons qui doivent simplement agir différemment dans différents Activities, c'est une bonne idée de réutiliser une classe Fragment existante.

1
Droidman 15 nov. 2017 à 23:35

Vos activités ont une logique différente, vous pouvez définir la logique du bouton dans chacune d'elles et partager les vues de cette manière. Vous pouvez utiliser un fragment pour ce faire, mais vous pouvez être plus direct en partageant une mise en page partielle.

Créez une mise en page partielle appelée three_buttons.xml

Three_buttons.xml

<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>
0
Robert I 15 nov. 2017 à 23:31

Oui, vous pouvez!

if(getActivity() instanceOf ActivityA) {
    //do stuff related to ActivityA
} else if(getActivity() instanceOf ActivityB) {
    //do stuff related to ActivityB
}
0
Anand Khinvasara 15 nov. 2017 à 23:31

Oui, vous pouvez, mais vous devez ajouter plus de logique à vos fragments et ajouter des interfaces pour chaque activité. Je ne recommande pas de faire cela, vous pourriez peut-être réutiliser vos mises en page.

1
diegoveloper 15 nov. 2017 à 23:29
47318900