Puisque les questions sur les meilleures pratiques, je voudrais ajouter, que très souvent une bonne idée d'utiliser l'approche hybride pour la création de fragment quand on travaille avec certains services web REST.
Nous ne pouvons pas passer des objets complexes, par exemple un modèle d'utilisateur, dans le cas de l'affichage d'un fragment d'utilisateur.
Mais ce que nous pouvons faire, c'est de vérifier onCreate
que l'utilisateur!=null et si non - alors le faire venir de la couche de données, sinon - utiliser l'existant.
De cette façon, nous obtenons à la fois la capacité de recréer par userId en cas de recréation de fragment par Android et la rapidité des actions de l'utilisateur, ainsi que la capacité de créer des fragments en maintenant l'objet lui-même ou seulement son id.
Quelque chose comme ça :
public class UserFragment extends Fragment {
public final static String USER_ID="user_id";
private User user;
private long userId;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
userId = getArguments().getLong(USER_ID);
if(user==null){
//
// Recreating here user from user id(i.e requesting from your data model,
// which could be services, direct request to rest, or data layer sitting
// on application model
//
user = bringUser();
}
}
public static UserFragment newInstance(User user, long user_id){
UserFragment userFragment = new UserFragment();
Bundle args = new Bundle();
args.putLong(USER_ID,user_id);
if(user!=null){
userFragment.user=user;
}
userFragment.setArguments(args);
return userFragment;
}
public static UserFragment newInstance(long user_id){
return newInstance(null,user_id);
}
public static UserFragment newInstance(User user){
return newInstance(user,user.id);
}
}
0 votes
Lorsqu'il y a des paramètres, il n'y a pas de choix, et cette question est largement traitée ici. Cependant, la question reste posée pour la construction sans argument du fragment.
1 votes
Après avoir appris le factory pattern et comment une classe appelante qui n'instancie pas elle-même un objet aide à les découpler, j'ai pensé que ce serait un point fort pour la méthode newInstance(). Ai-je tort ? Je n'ai pas vu cet argument spécifique parlé comme un avantage.