État du fragment de tiroir de navigation Android
Je suis actuellement en utilisant la Navigation de Tiroir pour mon APPLICATION Android. Dans mon premier fragment, j'ai un fragment de chargement de données à l'aide de Facebook de l'API Graphique. Ainsi, lorsque mon Application est chargée pour la première fois, il va d'abord pour le premier fragment.
Puis-je utiliser le Tiroir de Navigation, cliquez sur un autre Fragment et de l'afficher.
Et puis finalement, je réutiliser le Tiroir de Navigation à procéder vers le premier Fragment et de l'afficher.
Ma question que je me pose est, comment dois-je procéder pour utiliser le Fragment qui a été créé qu'une seule fois, au lieu de recréer à chaque fois que la Navigation de Tiroir de l'Élément sélectionné. Mon code pour la commutation des fragments sont comme indiqué ci-dessous.
private void displayView(int position) {
//update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new SelectionFragment();
break;
case 1:
fragment = new HomeFragment();
break;
case 2:
fragment = new PhotosFragment();
break;
case 3:
fragment = new CommunityFragment();
break;
case 4:
fragment = new PagesFragment();
break;
case 5:
fragment = new SplashFragment();
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
//update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
//error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
J'ai remarqué qu'il y a en effet une "nouvelle" instance du Fragment, chaque fois chaque fois que l'option est sélectionnée. Comment puis-je faire au sujet de la mise en œuvre de la logique de la création du Fragment instance une FOIS et en les réutilisant, de sorte que je n'ai pas continuellement charger le Fragment, encore et encore.
source d'informationauteur Arvind Dinivra
Vous devez vous connecter pour publier un commentaire.
À toute personne qui rencontre le même problème avec moi,j'ai réussi à trouver une solution.
Dans le bloc conteneur,j'ai à définir la spécificité de fragment de points de vue que je vais être en utilisant comme indiqué ci-dessous.
Dans chaque Fragment de vue,j'ai de "lien" avec le réel Fragment de lui-même, comme illustré ci-dessous par le "android:name" attribut.Ne prenez note de la chemin le Fragment,par exemple dans mon cas, c'est com.exemple.confesssionsrp.SelectionFragment.
Dans le MainActivity(ou de l'Activité où nous en sommes de la visualisation de l'fragments),de créer des variables pour chacun des Fragments, comme illustré ci-dessous.
Par la suite,dans le Oncreate de la MainActivity(ou de votre Activité spécifique),d'initialiser les différents fragments comme indiqué ci-dessous.
Passer sur la création d'une nouvelle Méthode appelée "ShowFragment" comme indiqué ci-dessous.
Dans la commutation des fragments,manuellement appel à la "ShowFragment" la méthode avec le Fragment sélectionné, comme illustré ci-dessous.
À faire tout ça dans l'ensemble,ne se réinitialise pas le Fragment chaque fois que nous avons vue,et, par conséquent, est la solution à la réponse.Merci pour ceux qui m'ont aidé jusqu'à présent :)!
Je suis en utilisant le code suivant:
Vous pouvez la remplacer par une nouvelle instance de la première et stocker le fragment, si elle n'est pas null, alors la remplacer par la stockées fragment.
L'activité doit mettre en œuvre NavigationDrawerFragment.NavigationDrawerCallbacks
Le fragment constructeur et newInstance méthodes ressembler à ceci:
Pour passer fragments de code que j'ai utiliser cette méthode à l'intérieur de la NavigationDrawerFragment:
La deuxième option est de commencer avec l'exemple de navigationDrawer que Android SDK offre. J'ai sélectionné ce modèle de l'activité lors de la création du projet et presque tout le code de ma réponse précédente est produite automatiquement.
Si vous souhaitez conserver les fragments d'après le dispositif de rotation ou d'autres similaires, il est une chose différente, vous devez conserver les fragments. Si non, vous avez juste besoin d'enregistrer la nouvelle instance du fragment dans une variable et de vérifier si elle est nulle pour en créer un nouveau ou utiliser l'ancien.
Au cas où quelqu'un veut une approche différente: vous pourriez trouver le fragment de la pile: