Je crée une application avec Fragments
et dans l'un d'eux, j'ai créé un constructeur par défaut et j'ai reçu cet avertissement :
Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead
Quelqu'un peut-il me dire pourquoi ce n'est pas une bonne idée ?
Pouvez-vous également me suggérer la manière dont je pourrais accomplir cette tâche ?
public static class MenuFragment extends ListFragment {
public ListView listView1;
Categories category;
//this is my "non-default" constructor
public MenuFragment(Categories category){
this.category = category;
}....
Sans utiliser le constructeur par défaut ?
2 votes
Duplicata possible de Meilleure pratique pour l'instanciation d'un nouveau fragment d'Android y stackoverflow.com/questions/10450348/ y stackoverflow.com/questions/11602433/ et probablement d'autres
3 votes
Non, ça n'aide pas. Ils n'ont pas répondu à ma question. Mais merci quand même :)
35 votes
@BlaineOmega En fait, celui-ci en particulier : stackoverflow.com/a/11602478/321697 répond définitivement à votre question. Lors d'un changement d'orientation ou d'un autre événement qui entraîne la recréation du fragment, Android utilise le constructeur par défaut ainsi que le Bundle passé en argument. Si vous utilisez un constructeur personnalisé, dès que le fragment est recréé suite à l'un de ces événements, tout ce que vous avez fait dans le constructeur personnalisé est perdu.
1 votes
Merci, mais cela répond au pourquoi, mais pas au comment.
0 votes
Cela est couvert par le premier et le deuxième lien dans mon commentaire original.
0 votes
@kcoppock mais dans mon cas, j'ai besoin de passer la référence à l'interface de l'utilisateur.
EditText
au fragment, qui ne peut pas être passé comme un extra de bundle :( donc toute suggestion pour ce scénario, je ne veux vraiment pas en faire une classe interne0 votes
Vous pouvez en savoir plus sur le constructeur par défaut et sur les raisons pour lesquelles vous ne devez pas implémenter d'autres constructeurs ici : [developer.Android.com/reference/Android/app/](http://developer.android.com/reference/android/app/Fragment.html#Fragment())
0 votes
@kcoppock Si setRetainInstance est mis à true alors le fragment et ses données ne seront pas détruits par le changement de configuration.
0 votes
Pour l'instant, vous pouvez simplement utiliser
@SuppressLint("ValidFragment")
au dessus de votre constructeur et éviter l'erreurmais à un stade ultérieur il est recommandé de passer des choses àDialog fragment
en utilisantbundles