L'utilisation d'un même fragment de ViewPager mais fragment aura mise en page différente à chaque fois
Je veux garder mon application mince.
Problème: je voudrais réutiliser mon Fragment
code de la classe pour créer 3 différentes instances dans le ViewPager
qui aura 3 pages. Chaque Fragment
sera différent ImageView
ou d'arrière-plan Drawable
. Quelles sont les meilleures pratiques sur cette question? J'ai remarqué que l'utilisation de méthodes de fabrique comme ici semblent être de bons, d'autres alternatives?
J'ai un Fragment
qui possède les méthodes suivantes:
Fragment.java
public static Fragment newInstance(Context context) {
FragmentTutorial f = new FragmentTutorial();
Bundle args = new Bundle();
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment, null);
return root;
}
J'ai un ViewPagerAdapter classe qui possède les méthodes suivantes:
ViewPagerAdapter.java
public ViewPagerAdapter(Context context, FragmentManager fm) {
super(fm);
mContext = context;
}
@Override
public Fragment getItem(int position) {
return new FragmentTutorial().newInstance(mContext);
}
@Override
public int getCount() {
return totalPage;
}
OriginalL'auteur AndyRoid | 2014-12-09
Vous devez vous connecter pour publier un commentaire.
Ce que j'ai trouvé est la "meilleure" façon de le faire (à mon avis, bien sûr) est de faire ce qui suit:
onCreateView()
même, ou à d'autres moments, il peut s'exécuter après onCreateView(). Personnellement, j'utilise un booléen pour vérifier si les données ont été fixés. À l'intérieur deonCreateView()
[ouonActivityCreated()
], je vérifie si les données ont été déjà défini. Si il a la charge dans les données. Sinon, lors de la configuration des données, de vérifier si les points de vue ont été créés dans le cache déjà. Cela se fait simplement en ayant des variables pour mettre en cache les données, direprivate ImageView mBackgroundView
. Si la vue n'est pas null, alors je peux définir les données sur les points de vue.getCount()
suffit d'utiliser la taille de la listegetItem()
vient d'obtenir l'élément dans la liste à la positionEssentiellement, le fragment est comme un simple serviteur - il n'a tout simplement le moins de travail nécessaire. Si elle ne veut pas avoir à gérer la sélection des données, d'autant mieux. Il va donc être beaucoup plus flexible. Juste donner des méthodes pour définir les données et points de vue de façon appropriée sur le fragment. Maintenant, la ArrayAdapter pouvez faire tout le sale travail acharné avec la gestion de données et de la donner à l'fragment approprié. De profiter de cela.
Maintenant, notez que c'est en supposant que vous souhaitez utiliser une mise en page unique, mais souhaitez modifier les différents aspects de cette mise en page (textes, fond, etc). Si vous souhaitez faire un master fragment de classe qui peut utiliser n'importe quelle sorte de mise en page définie, vous pouvez, mais note qu'il diminue l'exécution de la flexibilité (comment pouvez-vous modifier le texte ou de fond de quelque chose que vous obtenez à partir de l'internet? Vous ne pouvez tout simplement pas si vous ne pouvez définir et de choisir à partir de pré-définir des mises en page).
De toute façon, le ArrayAdapter doit prendre soin de toutes les données, tandis que le fragment n'est tout simplement car il est conçu pour faire, d'une manière plus flexible de préférence.
Edit:
Voici le projet sur lequel j'ai le plus récemment mis en œuvre ce type de modèle. Remarque qu'il a beaucoup plus, donc je vais le remplacer par de certaines pseudo-pseudo-code dans la matin/après-midi.
Edit2:
Ici est un plus (trop) exemple simplifié du modèle décrit ci-dessus.
Avertissement: Le code suivant n'a absolument pas de gestion du cycle de vie des implémentations et est âgé de code qui a été touchée depuis août '14
Maintenant, ici, sont exactement les parties pertinentes du code:
BaseFragment
MyAdapter
Aussi, je peux créer de certaines pseudo-pseudo-code, si cela peut aider à clarifier pour vous. Je devrais avoir une "base" fragment de classe traînent encore pour vous aider le long avec peut-être un ArrayAdapter dans mon historique de git. Le fragment peut simplement être configuré pour utiliser la couleur d'arrière-plan et/ou l'utilisation de tout texte.
J'ai ajouté les liens vers mon code, mais de prendre note que le cycle de vie des implémentations sont encore très insuffisantes. Aussi, je pense que c'était la première fois que j'ai mis en place un système de ce genre avec un ViewPager mais c'est celle que j'ai le plus de souvenir je l'ai donc inclus vite pour l'instant. Il est 1:57 AM en ce moment et j'ai besoin de se réveiller autour de 9-10 SUIS, donc je vais essayer d'y revenir dès que possible le matin/l'après-midi.
Ajouté dans un pas-si-pseudo pseudo code de l'exemple, même si j'ai trouvé que j'ai fait faire un exemple plus simple, autour d'août. En fin de compte, j'ai fait un lien vers le GitHub pages de chaque exemple a été ainsi, et l'autre bon côté des choses est que le code est testé pour fonctionner pour vous. Espérons que cela aide~
Vraiment apprécier le code, mais un peu curieux de savoir pourquoi ce n'était pas upvoted plus. Je suis fondamentalement à l'aide de Firebase de données de mise à jour périodiquement, et je veux que mon ViewPager pour afficher la dynamique de données que j'ajoute à Firebase (le ViewPager utilise le Firebase auditeur de mettre à jour les données).
OriginalL'auteur Jawad
Vous avez besoin pour passer d'une pièce d'identité avec
newInstance()
lors de la création de l'instance. Et selon cette id, vous pouvez utiliserif..else
pour choisir le fichier de mise en page.Voir mon code de référence ci-dessous:
C'est juste un code de référence, vous avez besoin pour mettre en œuvre une logique d'entreprise.
OriginalL'auteur VVB
Ne pouvez-vous pas simplement présenter des champs pour le Fragment de la classe de compte pour les écarts en arrière-plan, etc. et de les ajouter à son constructeur? Puis dans
getItem
instancier le Fragment de classe avec des valeurs différentes en fonction de la valeur deposition
.OriginalL'auteur JASON G PETERSON