Rafraîchir le fragment au rechargement

Dans une application android , je charge des données depuis une firebase database dans une TableView intérieur d’un Fragment . Mais lorsque je Reload le fragment il affiche les données précédentes. Puis-je repeupler le Fragment avec les données actuelles au lieu des données précédentes?

Je pense que vous souhaitez actualiser le contenu du fragment lors de la mise à jour de la firebase database

Si oui, détachez le fragment et rattachez-le

 // Reload current fragment Fragment frg = null; frg = getSupportFragmentManager().findFragmentByTag("Your_Fragment_TAG"); final FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.detach(frg); ft.attach(frg); ft.commit(); 

Your_Fragment_TAG est le nom que vous avez donné à votre fragment lorsque vous l’avez créé.

Ce code est destiné à la bibliothèque de support.

Si vous ne supportez pas les anciens appareils, utilisez simplement getFragmentManager au lieu de getSupportFragmentManager

[MODIFIER]

Cette méthode nécessite que le fragment ait une balise.
Si vous n’en avez pas, alors la méthode de @ Hammer est ce dont vous avez besoin.

Cela actualisera le fragment actuel:

 FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.detach(this).attach(this).commit(); 

Si vous ne possédez pas la balise de fragment, le code suivant fonctionne bien pour moi.

 Fragment currentFragment = getActivity().getFragmentManager().findFragmentById(R.id.fragment_container); if (currentFragment instanceof "NAME OF YOUR FRAGMENT CLASS") { FragmentTransaction fragTransaction = (getActivity()).getFragmentManager().beginTransaction(); fragTransaction.detach(currentFragment); fragTransaction.attach(currentFragment); fragTransaction.commit();} } 

Vous ne pouvez pas recharger le fragment lorsqu’il est attaché à une activité, où vous obtenez une exception ” Fragment Already Added “.

Donc, le fragment doit d’abord être détaché de son activité puis attaché. Tout peut être fait en utilisant l’api courant sur une seule ligne:

 getFragmentManager().beginTransaction().detach(this).attach(this).commit(); 

Mise à jour: Ceci est d’incorporer les modifications apscopes aux API 26 et supérieures:

 FragmentTransaction transaction = mActivity.getFragmentManager() .beginTransaction(); if (Build.VERSION.SDK_INT >= 26) { transaction.setReorderingAllowed(false); } transaction.detach(this).attach (this).commit(); 

Pour plus d’informations sur la mise à jour, consultez la page https://stackoverflow.com/a/51327440/4514796.

Utilisez un ContentProvider et chargez vos données en utilisant un “CursorLoader”. Avec cette architecture, vos données seront automatiquement rechargées lors des modifications de la firebase database. Utilisez des frameworks tiers pour votre ContentProvider – vous ne voulez pas vraiment l’implémenter par vous-même …

  MyFragment fragment = (MyFragment) getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG); getSupportFragmentManager().beginTransaction().detach(fragment).attach(fragment).commit(); 

Cela ne fonctionnera que si vous utilisez FragmentManager pour initialiser le fragment. Si vous l’avez en tant que en XML, il n’appellera plus le onCreateView . Gaspillé mes 30 minutes pour comprendre cela.

J’ai eu le même problème, mais rien de ce qui précède n’a fonctionné pour le mien. soit il y avait un problème de backstack (après le chargement quand l’utilisateur appuyait sur le bouton pour revenir au même fragment) ou il onCreaetView pas appelé onCreaetView

enfin j’ai fait ceci:

 public void transactFragment(Fragment fragment, boolean reload) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); if (reload) { getSupportFragmentManager().popBackStack(); } transaction.replace(R.id.main_activity_frame_layout, fragment); transaction.addToBackStack(null); transaction.commit(); } 

bon point est que vous n’avez pas besoin de l’étiquette ou de l’identifiant du fragment non plus. si vous voulez recharger

vous pouvez actualiser votre fragment lorsqu’il est visible pour l’utilisateur, ajoutez simplement ce code dans votre fragment, cela actualisera votre fragment lorsqu’il sera visible.

 @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { // Refresh your fragment here getFragmentManager().beginTransaction().detach(this).attach(this).commit(); Log.i("IsRefresh", "Yes"); } } 

protected void onResume() { super.onResume(); viewPagerAdapter.notifyDataSetChanged(); }

Ecrivez viewpagerAdapter.notifyDataSetChanged (); dans onResume () dans MainActivity. Bonne chance 🙂