2011-01-06 1 views
1

J'écris une application qui a une activité principale qui contrôle l'affichage principal que l'utilisateur voit et interagit avec.Android inter-Activity signalisation (newbie question)

Il a également un menu d'options et chaque élément de menu a sa propre activité et mise en page pour effectuer diverses tâches subordonnées. Certaines de ces tâches peuvent entraîner des modifications du contenu de l'affichage principal. Donc, je veux que ces activités subordonnées soient capables de signaler l'activité principale qu'elle doit redessiner ou recalculer l'affichage principal la prochaine fois que le contrôle est transféré à l'activité principale, par exemple son gestionnaire onResume().

Ce qui est un moyen léger pour une activité de signaler à l'autre qu'il doit faire quelque chose. Je viens d'un environnement Windows, donc je cherche l'équivalent d'envoyer un message WM_PAINT, ou de définir un drapeau ou un sémaphore pour que l'activité principale soit lue.

J'ai essayé de mettre un booléen public dans l'activité principale mais je me suis plaint qu'il devait être statique. Merci d'avance!

Répondre

2

La façon dont deux composants d'une application Android communiquent entre eux est avec les diffusions et les récepteurs de diffusion. Un récepteur de diffusion peut soit être enregistré dans le manifeste, soit dans du code de façon dynamique (bien que assurez-vous de le désinscrire ou le journal se plaindra de la fuite des broadcastreceivers). Lorsque vous enregistrez le récepteur, vous devez également fournir une intention correspondant à l'intention que vous avez utilisée pour réaliser le broadcasat.

Une autre façon possible de le faire est que si vous appelez une activité directement d'une autre, vous pouvez appeler la méthode startActivityForResult(): http://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent, int).

Oh, aussi juste une recommandation, chaque application android a un global sharedpreferences que vous pouvez exploiter, de sorte que vous pouvez simplement vérifier que chaque fois que vous redessinez.

+0

J'ai considéré les diffusions et les choses avec des intentions mais elles semblaient exagérées pour ce dont j'avais besoin. Et je n'essaie pas de démarrer l'activité principale - sa méthode onResume s'exécute de toute façon quand elle prend le contrôle après la fin de l'activité subordonnée. C'est pourquoi j'ai décrit ce que je cherche comme un booléen, un drapeau, un sémaphore (j'ai probablement confondu les choses en mentionnant WM_PAINT). Android dit préférences partagées "vous permet d'enregistrer et de récupérer des paires clé-valeur persistantes de types de données primitifs" et je ne cherche pas à persister cela, donc cela semble exagéré. Il n'y a pas de moyen léger d'exposer un booléen public? –

+0

Dans ce cas, vous êtes vraiment à la recherche de sharedpreferences http://developer.android.com/reference/android/content/SharedPreferences.html vous pouvez également lire la section sur la persistance des données http://developer.android.com En d'autres termes, consultez soit getSharedPreferences():), ou getDefaultSharedPreferences() http://developer.android.com/reference/android/preference/PreferenceManager.html#getDefaultSharedPreferences(android.content.Context) –