Pourquoi utiliser newInstance pour DialogFragment au lieu du constructeur?
À la recherche à la la documentation de DialogFragment
on voit la statique newInstance
méthode pour initialiser une nouvelle boîte de dialogue d'alerte fragment. Ma question est, pourquoi ne pas utiliser un constructeur à le faire, comme ceci:
public MyAlertDialogFragment(int title) {
Bundle args = new Bundle();
args.putInt("title", title);
setArguments(args);
}
N'est-ce pas exactement la même ou est-il différent d'une certaine manière? Quelle est la meilleure approche et pourquoi?
source d'informationauteur Ricardo Amaral | 2012-12-23
Vous devez vous connecter pour publier un commentaire.
Si vous surcharger le constructeur avec
MyAlertDialogFragment(int title)
le système Android peut encore appeler la valeur par défautMyAlertDialogFragment()
constructeur si l'Fragment
doit être recréé et le paramètre est alors pas passé.Android s'appuie sur des Fragments d'avoir un public, zéro argument du constructeur de sorte qu'il peut recréer à divers moments (par exemple, les modifications de configuration, la restauration de l'état d'application après avoir été précédemment tué par Android, etc.).
Si vous ne disposez pas d'un tel constructeur (par exemple, l'un dans la question), vous obtiendrez cette erreur lorsqu'il tente d'instancier un:
Arguments donnés par
Fragment.setArguments(Bundle)
seront enregistrées pour vous et à toutes les nouvelles instances que sont (re)créé. À l'aide d'une méthode statique pour créer le Fragment simplement fournit un moyen facile d'installation les arguments requis, tout en conservant un zéro argument du constructeur.Si vous créez un DialogFragment qui reçoit des objets par le constructeur, vous avez des problèmes lors de l'android recrée votre fragment.
C'est ce qui va arriver:
Pour éviter cela, vous avez besoin de ne pas compter sur le constructeur pour établir les dépendances, mais en Grappes (arguments et enregistré des cas). Qui peut vous forcer à mettre en œuvre Parcelable dans certaines classes, qui suce.
EDIT: vous pouvez reproduire Android de tuer l'application (étape 4) par l'activation de "ne pas maintenir des Activités" dans les paramètres de Développement. C'est la façon de tester facilement.
Parce que quand android est la recréation d'un fragment, il utilise toujours le constructeur vide, et en utilisant newInstance (), vous pouvez définir les données qui fragmentent l'utilise lors de la recréation, par exemple lorsque l'écran est tourné
par exemple: