android studio come chiamare un metodo in un'altra attività


Risposta 1:

Se ti riferisci a qualcosa come:

new MainActivity (). doMyMethod ();

allora questo non è possibile.

La risposta effettiva dipende interamente da ciò che stai cercando di ottenere. Potrebbe essere che la risposta implichi il passaggio di un riferimento alla tua attività a un'altra classe, o l'utilizzo di un'interfaccia, o l'utilizzo di un EventBus come LocalBroadcastManager, o l'avvio di una nuova attività con un Intent e qualche forma di flag passato nel suo Bundle "extra", o qualcos'altro completamente.

L'aggiunta di ulteriori informazioni su ciò che stai cercando di ottenere alla descrizione della tua domanda ti aiuterà.

Modificare:

Ora che ho capito che l'obiettivo è chiamare un metodo in un'attività da un BroadcastReceiver, posso spiegare come in questo caso utilizzo quasi un'interfaccia. Ecco un esempio di questo lavoro:

Per prima cosa, crea un'interfaccia per trasmettere i dati che desideri inviare dal tuo BroadcastReceiver. Qui, ad esempio, è OnSampleReadyListener

public final class SampleReceiver estende BroadcastReceiver { stringa finale statica pubblica SAMPLE_DATA_EXTRA = "sample_extra"; private OnSampleReadyListener mListener; @SuppressWarnings ("unused") public SampleReceiver () {} public SampleReceiver (OnSampleReadyListener listener) { mListener = ascoltatore; } @Oltrepassare public void onReceive (Context context, Intent intent) { stringa finale someExampleData = intent.getStringExtra (SAMPLE_DATA_EXTRA); mListener.onSampleDataReady (someExampleData); } interfaccia pubblica OnSampleReadyListener { void onSampleDataReady (String someExampleData); }}

Quindi, configura la tua classe Activity per passare un'istanza di OnSampleReadyListener e imposta la tua attività per ascoltare le trasmissioni:

la classe pubblica MainActivity estende AppCompatActivity implementa OnSampleReadyListener { private SampleReceiver mReceiver; @Oltrepassare protected void onCreate (@Nullable Bundle savedInstanceState) { super.onCreate (savedInstanceState); // Passa un'istanza dell'ascoltatore al tuo ricevitore ... mReceiver = new SampleReceiver (this); }//..Configura la tua attività per ascoltare il tuo ricevitore di trasmissione ... // Esegue qui qualsiasi logica relativa alle trasmissioni ricevute @Oltrepassare public void onSampleDataReady (String someExampleData) { Log.d ("TAG", "Dati ricevuti:" + someExampleData); }}

Risposta 2:

1.Mainactivity main = new MainActivity ()

Main.doSomeWork ():

In questo modo puoi chiamare solo questa (nuova) istanza di attività. Funziona per le classi ma nello scenario di attività vogliamo l'istanza corrente di Mainactivity (qualcosa sullo schermo in questo momento come una visualizzazione di testo)

2. Puoi passare l'istanza di Mainactivity a un'altra classe e chiamare instance.doWork, ()

Questo non è consigliato perché passerai un contesto e potresti mantenerlo in vita quando non è necessario.

3. È possibile creare un metodo statico in Mainactivity e chiamare MainActivity.doSomeWork (). Il tuo metodo non avrà accesso ad altre cose non statiche.

4. puoi implementare l'interfaccia nell'attività principale e passarla alla classe. Puoi chiamare interface.doSomeWork.Questo è il modo migliore per andare nella maggior parte delle situazioni.

5. Creare Mainactivty come singleton e chiamare MainActivity.getInstance (). DoSomeWork (), che funziona bene per le classi controller.

6. Crea il ricevitore di trasmissione, registrati con l'attività e chiamalo dalla classe, ma avrai bisogno del contesto.

7. Usi il gestore e passi i messaggi.

8. Utilizzare una libreria di passaggio di messaggi come greenbot.


Risposta 3:

Definisci un metodo pubblico nella tua attività:

public void foo () { //cose}

Quindi in classe:

((YourActivity) getActivity) .foo ();

Funziona per le classi dell'interfaccia utente come Fragments e DialogFragments.


Risposta 4:

Perché sulla Terra vorresti fare qualcosa di simile, le attività e la ragione del frammento di esistere è rendere solo l'interfaccia utente.

Quindi nella maggior parte dei casi non è necessario accedere ai loro metodi.

Se si dispone di una logica comune che si desidera utilizzare, provare a separarla utilizzando uno degli schemi di progettazione dell'architettura MVP-MVVM- .. ecc.


Risposta 5:

È possibile passare l'istanza dell'attività principale nel costruttore di quella classe.

MyClass (Mainactivity mainactivity,… ..)

{

this.mainactivity = mainactivity;

}

mainactivity.method ();


Risposta 6:

Intento intento = nuovo intento (contesto, TargetActivity.class);

startActivity (intent);

Nota: "contesto" può avere valori diversi a seconda della situazione. Gentilmente StackOverflow