0

J'ai une méthode dans l'activité de fragment et si cette méthode se déclenche, j'ai besoin de mettre à jour le fragment listView. Je traite avec la base de données. Où je suis en train d'effacer la base de données de l'utilisateur particulier et je vais mettre à jour le fragment.comment mettre à jour la méthode d'activité dans l'écran de fragment android?

Le problème est: si l'utilisateur est dans le même moyen d'écran, comment mettre à jour la liste de fragments si la méthode d'activité du fragment se déclenche? Cela ne fonctionne que lorsque j'ai besoin de revenir à l'activité et que je dois de nouveau passer au même écran.

Voici le code:

public class ActivityExpertDasboard extends ActivityBase { 

    // this method is calling when particular user closes the screen. when I am in fragment screen.. 
    @Override 
    protected void onChatInvitation(String msgKeys, String userId) { 
     String msgKey = mApplication.returnEmptyStringIfNull(msgKeys); 
     LogMessage.e("username", mPreference.getStringFromPreference(Constants.CLOSE_CHAT_USERNAME)); 
     if (userId.equalsIgnoreCase(mPreference.getStringFromPreference(Constants.CLOSE_CHAT_USERNAME))) { 
      if (msgKey.equalsIgnoreCase(Constants.CODE_CHAT_END)) { 
       AAEDatabaseHelper.deleteUsername(mPreference.getStringFromPreference(Constants.CLOSE_CHAT_USERNAME)); 
       // I need to update in Fragment screen if this is triggered. 
       } 
     } 
     super.onChatInvitation(msgKey, userId); 
    } 
} 

FragmentExpertLiveChats:

public class FragmentExpertLiveChats extends Fragment { 

    private List<LiveChatDetails> list; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_chat_history, container, 
       Constants.ATTACH_TO_ROOT); 
    list = AAEDatabaseHelper.getLiveChatDetails(Constants.TABLE_LIVE_CHAT); 
    } 

    @Override 
    public void onStart() { 
     LogMessage.e("onStart", "onStart"); 
     super.onStart(); 
     updateUI(); 
    } 


} 

Si le téléphone est dans l'écran FragmentExpertLiveChat sans faire perfomance et si la méthode dans les appels d'activité, comment mettre à jour la ligne? Je dois utiliser un récepteur de diffusion? Si oui, où et comment?

+0

dans la méthode onChatInvitation vous pouvez vérifier si FragmentExpertLiveChats n'est pas nul alors appelez fragmentExpertLiveChatsInstance.updateUI() ou vous pouvez utiliser https://github.com/bboyfeiyu/AndroidEventBus – TheFlash

Répondre

2

Pour cela, et beaucoup plus de cas, où vous devez communiquer entre différents composants, je suggère d'utiliser EventBus. Son utilisation est très simple:

  1. Définir les événements: public class MessageEvent { /* Additional fields if needed */}

  2. Préparent abonnés Enregistrez votre abonné (dans votre onCreate ou dans un constructeur ): eventBus.register(this);

Declare votre méthode d'abonnement: @Subscribe public void onEvent(AnyEventType event) {/* Do something */};

  1. événements Post: eventBus.post(event);

Ne pas oublier de désenregistrer après. Je vous suggère de faire l'enregistrement/désinscription en début/arrêt ou en pause/reprise, ou, en cas de fragments, joindre/dettach.

Dans votre cas, inscrivez-vous dans Fragment, et dans Activité, lorsque l'utilisateur fait ses choses, publiez un événement.