android studio comment appeler une méthode dans une autre activité


Réponse 1:

Si vous faites référence à quelque chose comme:

new MainActivity (). doMyMethod ();

alors ce n'est pas possible.

La réponse réelle dépend entièrement de ce que vous essayez d'accomplir. Il se peut que la réponse implique de transmettre une référence à votre activité à une autre classe, ou d'utiliser une interface, ou d'utiliser un EventBus comme LocalBroadcastManager, ou de démarrer une nouvelle activité avec une intention et une forme d'indicateur passé dans son bundle «extras», ou tout autre chose.

L'ajout d'informations sur ce que vous essayez d'atteindre à la description de votre question vous aidera.

Éditer:

Maintenant que je comprends que le but est d'appeler une méthode dans une activité à partir d'un BroadcastReceiver, je peux expliquer comment dans ce cas j'utilise presque une interface. Voici un exemple de ces travaux:

Tout d'abord, créez une interface pour transmettre les données que vous souhaitez envoyer depuis votre BroadcastReceiver. Ici, par exemple, c'est OnSampleReadyListener

la classe finale publique SampleReceiver étend BroadcastReceiver { public static final String SAMPLE_DATA_EXTRA = "sample_extra"; mListener OnSampleReadyListener privé; @SuppressWarnings ("inutilisé") public SampleReceiver () {} public SampleReceiver (écouteur OnSampleReadyListener) { mListener = auditeur; } @Passer outre public void onReceive (Contexte contextuel, intention d'intention) { chaîne finale someExampleData = intent.getStringExtra (SAMPLE_DATA_EXTRA); mListener.onSampleDataReady (someExampleData); } interface publique OnSampleReadyListener { void onSampleDataReady (String someExampleData); }}

Ensuite, configurez votre classe d'activité pour transmettre une instance d'OnSampleReadyListener et configurez votre activité pour écouter les diffusions:

La classe publique MainActivity étend AppCompatActivity implémente OnSampleReadyListener { Private SampleReceiver mReceiver; @Passer outre protected void onCreate (@Nullable Bundle savedInstanceState) { super.onCreate (savedInstanceState); // Passez une instance de l'auditeur à votre récepteur ... mReceiver = nouveau SampleReceiver (this); }//..Configurez votre activité pour écouter votre récepteur de diffusion ... // Exécutez toute logique liée aux diffusions reçues ici @Passer outre public void onSampleDataReady (String someExampleData) { Log.d ("TAG", "Données reçues:" + someExampleData); }}

Réponse 2:

1.Mainactivity main = nouvelle MainActivity ()

Main.doSomeWork ():

De cette façon, vous ne pouvez appeler que cette (nouvelle) instance d'activité. Cela fonctionne pour les classes, mais dans le scénario d'activité, nous voulons une instance actuelle de Mainactivity (quelque chose à l'écran en ce moment comme une vue de texte)

2. Vous pouvez transmettre l'instance de Mainactivity à une autre classe et appeler instance.doWork, ()

Ce n'est pas conseillé car vous passerez un contexte et pourrez le maintenir actif lorsqu'il n'est pas nécessaire.

3. Vous pouvez créer une méthode statique dans Mainactivity et appeler MainActivity.doSomeWork (). Votre méthode n'aura pas accès à d'autres éléments non statiques.

4. vous pouvez implémenter l'interface dans la mainactivity et la transmettre à la classe. Vous pouvez appeler interface.doSomeWork. C'est la meilleure façon de procéder dans la plupart des situations.

5. Créez Mainactivty en tant que singleton et appelez MainActivity.getInstance (). DoSomeWork (). Cela fonctionne bien pour les classes de contrôleur.

6. Créez un récepteur de diffusion, inscrivez-vous à l'activité et appelez-le depuis la classe dont vous aurez besoin de contexte.

7. Vous utilisez un gestionnaire et passez des messages.

8. Utilisez une bibliothèque de transmission de messages comme greenbot.


Réponse 3:

Définissez une méthode publique dans votre activité:

public void foo () { //des trucs}

Puis dans la classe:

((VotreActivité) getActivity) .foo ();

Cela fonctionne pour les classes d'interface utilisateur telles que Fragments et DialogFragments.


Réponse 4:

Pourquoi diable voudriez-vous faire quelque chose comme ça, la raison des activités et des fragments d'exister est de rendre l'interface utilisateur uniquement.

Donc, dans la plupart des cas, vous n'avez pas besoin d'accéder à leurs méthodes.

Si vous avez une logique commune que vous souhaitez utiliser, essayez de la séparer en utilisant l'un des modèles de conception d'architecture MVP-MVVM- .. etc.


Réponse 5:

Vous pouvez transmettre l'instance de l'activité principale dans le constructeur de cette classe.

MyClass (Mainactivity mainactivity,… ..)

{

this.mainactivity = activité principale;

}

mainactivity.method ();


Réponse 6:

Intent intent = new Intent (contexte, TargetActivity.class);

startActivity (intention);

Remarque: le «contexte» peut avoir des valeurs différentes selon la situation. Veuillez StackOverflow