GreenRobot EventBus erreur dans les fragments: Non abonnés inscrits à l'événement de classe

J'ai une activité, sa mise en page, contient un FrameLayout. J'utilise le framelayout comme un fragment de récipient. - Je remplacer les fragments de la FrameLayout à l'aide de FragmentManager transactions.

Dans l'un des fragment de la méthode onCreate-je enregistrer le fragment avec l'EventBus à l'aide.

@Override
public void onCreate(){
  EventBus.getDefault().register(this);
  //other initialization code
}

Le fragment a une GridView dans sa mise en page. Chaque fois qu'un élément dans le contrôle gridView est cliqué, je poste un événement à l'EventBus

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){
    View rootView = inflater.inflate(R.layout.fragment_category, container, false);
    gridView = (GridView) rootView.findViewById(R.id.categry_grid_view);
    gridAdapter = new CustomGridAdapter(getActivity());
    gridView.setAdapter(gridAdapter);

    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Category clickedCategory = gridAdapter.getItem(position);
            EventBus.getDefault().post(new MyEvent());
        }
    });

Les méthodes de gestionnaire d'événement pour cet événement sont dans le même fragment, c'est à dire Le fragment a de la méthode suivante

public void onEvent(MyEvent e){
    //some code;
}

Cela fonctionne bien jusqu'à ce que l'application perd le focus et devient inactif (en raison d'appuyer sur le bouton d'accueil ou de verrouillage de l'écran). Quand je fais de l'application active de nouveau, les gestionnaires d'événements pour les événements ne sont pas appelés. Je peux voir les instructions suivantes dans le LogCat

com.example.app D/Event No subscribers registered for event class com.example.app.MyEvent
com.example.app D/Event No subscribers registered for event class de.greenrobot.event.NoSubscriberEvent

Quelqu'un peut me dire ce que je fais mal ici?

Edit 1:

Lorsque la demande devient inactif en raison de verrouillage de l'écran ou le bouton home enfoncé, le fragment de la méthode onStop est appelé. Le code pour annuler le fragment de l'EventBus est dans la méthode onStop. Lorsque l'application s'active à nouveau, le fragment de la onStart et onResume méthodes sont appelées. Donc je l'ai déplacé mon code pour inscrire le fragment avec l'EventBus dans sa méthode onStart.

@Override
public void onStart(){
  super.onStart();
  EventBus.getDefault().register(this);
}

J'ai mis un journal des états afin de vérifier si la méthode onStart est en fait appelée lorsque l'application active. Il est appelé. Des choses qui ne fonctionnent pas lors de l'application devient inactif, puis de nouveau actif.

Edit 2
J'ai oublié de mentionner que l'activité qui contient ce fragment a également souscrit à l'EventBus. Le code permettant d'enregistrer l'activité à l'EventBus est dans sa méthode onCreate et le code pour annuler l'enregistrement de l'activité réside dans sa méthode onStop.

  • Je ne vois pas d'enregistrer le code dans votre post.
  • Son dans la méthode onCreate. À droite en haut: EventBus.getDefault().s'inscrire(ce);
  • Vérifier mon montage sur la question.
InformationsquelleAutor GunnerFan | 2014-10-06