Vérifiez que getArguments a certaines données à récupérer
Android Studio 0.8.7
J'ai la fonction suivante qui définit un argument dans le fragment:
public static Fragment newInstance(UUID uuid) {
Log.d(TAG, "newInstance: " + uuid);
Bundle arguments = new Bundle();
arguments.putSerializable(EXTRA_JOB_ID, uuid);
DetailFragment fragment = new DetailFragment();
fragment.setArguments(arguments);
return fragment;
}
Dans mon onCreate() je récupère les arguments à l'aide de getArguments comme ceci:
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate()");
super.onCreate(savedInstanceState);
/* Get the arguments from the fragment */
UUID uuid = (UUID)getArguments().getSerializable(EXTRA_JOB_ID);
.
.
}
Cependant, parfois, il y a une situation où je ne serai pas l'envoi de tous les arguments pour être récupérées, et mon programme va planter dans ce cas.
L'aide d'Intentions a la hasExtra méthode pour vérifier:
if(getActivity().getIntent().hasExtra(Intent.EXTRA_TEXT)) {
/* There is something to be retrieved */
}
Je me demande si il y a quelque chose de similaire avec getArguments
Merci beaucoup à l'avance,
Probablement que vous souhaitez utiliser
arguments.containsKey(EXTRA_JOB_ID)
? Aussi, je pense que vous devez ajouter manuel null-check
si la clé est là, mais ne contient pas de données.OriginalL'auteur ant2009 | 2014-08-26
Vous devez vous connecter pour publier un commentaire.
Comme une autre suggestion pour les autres réponses, votre
newInstance(...)
méthode pourrait être conçu de manière un peu mieux. Comme il est, ça ajoute toujours des arguments, même si votreUUID
paramètre estnull
.Essayez de la modifier à ce...
Puis dans le
onCreate(...)
méthode de votreFragment
vérifier les arguments avant tout...OriginalL'auteur Squonk
Le Fragment.getArguments retour d'un Faisceau objet de toutes les valeurs de l'envoyer de l'autre composante. ainsi, vous pouvez utiliser Bundle.containsKey pour vérifier si la clé est disponible dans reçu bundle ou pas:
OriginalL'auteur ρяσѕρєя K
Le but de la
newInstance()
modèle de conception autant que je sache, c'est que vous avez la garantie de votre fragment aura les arguments fournis lorsqu'il est instancié.En d'autres termes, la raison pour laquelle vous appelez
newInstance(something)
est parce que vous savez quelque chose sera passé dans les fragments de l'argument, de sorte que vous pouvez toujours récupérer quelque chose à partir du fragmentgetArguments()
méthode plus tard.Donc, si vous avez l'intention de passer la valeur null comme un argument, par exemple
newInstance(null)
, quel genre de défaites le but de l'utilisation de la newInstance modèle de conception, vous allez obtenir un nullpointer exception.Vous pouvez appeler
getIntent.containsKey(EXTRA_JOB_ID)
pour vérifier si votre argument est null ou pas.OriginalL'auteur Tim Malseed