web-dev-qa-db-fra.com

Comment gérer onClick en fragments

Ceci est mon premier essai sur Fragments et je ne suis pas capable de gérer Android: onClick

J'ai un bouton dans mon fragment XML comme celui-ci

    <Button
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="@string/save_keywords_button"
        Android:id="@+id/save_keywords"
        Android:layout_marginTop="340dp"
        Android:background="#FF2E7D32"
        Android:textColor="#FFFFFF"
        Android:typeface="normal"
        Android:onClick="myLogic" />

J'ai cherché beaucoup de résultats et je ne peux pas trouver la solution exacte pour gérer l'événement onClick.

Ma question est la suivante: comment obtenir l'ID de mon bouton et écrire la méthode myLogic. FindViewById () ne fonctionne pas en fragments et où devrais-je écrire la méthode? En fragment ou dans mon activité? 

6
Uday

Une meilleure approche consisterait à implémenter OnClickListener dans votre classe de fragment et à remplacer onCreateView dans votre fragment lorsque vous affectez le programme d’écoute à votre bouton. 

En plaçant l'attribut onClick dans votre présentation XML, votre activité à la charge cherchera l'élément dans l'activité, pas dans le fragment. Cela jettera une exception.

Je suggérerais de lire une hiérarchie fragment-activity pour comprendre quand est-il possible d'accéder aux éléments de votre fragment.

public class StartFragment extends Fragment implements OnClickListener{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_start, container, false);

    Button b = (Button) v.findViewById(R.id.save_keywords);
    b.setOnClickListener(this);
    return v;
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.save_keywords:

        ...

        break;
    }
}
}

Référence de: ici

15
parohy

Essayez d'ajouter une méthode

public void myLogic(View v)
1
Nir Horovitz

Android:onClick="myLogic" n'appellera pas la méthode myLogic à l'intérieur du fragment. Utilisez plutôt OnClickListener pour gérer ce type d’événement.

Voir ces références ci-dessous

Meilleure façon d'implémenter View.OnClickListener dans Android

http://developer.Android.com/reference/Android/view/View.OnClickListener.html

1
GeekDroid

Si vous avez besoin d’afficher un objet dans fragmen, vous pouvez effectuer cette opération getView().findViewById(R.id.foo); uniquement après l’appel de onCreateView(). Et si vous spécifiez onClick dans le fichier xml, vous n'avez pas besoin de coder de lien vers cette méthode dans votre programme; implémentez simplement cette méthode dans votre activité.

1
callOfCode