android studio wie man eine Methode in einer anderen Aktivität aufruft


Antwort 1:

Wenn Sie sich auf etwas beziehen wie:

neue MainActivity (). doMyMethod ();

dann ist das nicht möglich.

Die tatsächliche Antwort hängt ganz davon ab, was Sie erreichen möchten. Es kann sein, dass die Antwort darin besteht, einen Verweis auf Ihre Aktivität an eine andere Klasse zu übergeben, eine Schnittstelle zu verwenden oder einen EventBus wie LocalBroadcastManager zu verwenden oder eine neue Aktivität mit einer Absicht und einer Art Flag zu starten, die an das Bundle „Extras“ übergeben wird. oder etwas ganz anderes.

Das Hinzufügen weiterer Informationen zu dem, was Sie erreichen möchten, zu Ihrer Fragenbeschreibung hilft.

Bearbeiten:

Nachdem ich verstanden habe, dass das Ziel darin besteht, eine Methode in einer Aktivität von einem BroadcastReceiver aufzurufen, kann ich erklären, wie ich in diesem Fall fast eine Schnittstelle verwende. Hier ist ein Beispiel für diese Arbeit:

Erstellen Sie zunächst eine Schnittstelle zum Übertragen der Daten, die Sie von Ihrem BroadcastReceiver senden möchten. Hier ist es beispielsweise OnSampleReadyListener

public final class SampleReceiver erweitert BroadcastReceiver { public static final String SAMPLE_DATA_EXTRA = "sample_extra"; private OnSampleReadyListener mListener; @ SuppressWarnings ("unbenutzt") public SampleReceiver () {} public SampleReceiver (OnSampleReadyListener Listener) { mListener = Listener; }} @Override public void onReceive (Kontextkontext, Absichtserklärung) { final String someExampleData = intent.getStringExtra (SAMPLE_DATA_EXTRA); mListener.onSampleDataReady (someExampleData); }} öffentliche Schnittstelle OnSampleReadyListener { void onSampleDataReady (String someExampleData); }}}}

Richten Sie dann Ihre Aktivitätsklasse so ein, dass eine Instanz von OnSampleReadyListener übergeben wird, und richten Sie Ihre Aktivität so ein, dass sie auf Broadcasts wartet:

öffentliche Klasse MainActivity erweitert AppCompatActivity implementiert OnSampleReadyListener { privater SampleReceiver mReceiver; @Override protected void onCreate (@Nullable Bundle savedInstanceState) { super.onCreate (savedInstanceState); // Eine Instanz des Listeners an Ihren Receiver übergeben ... mReceiver = neuer SampleReceiver (this); }}//.. Richten Sie Ihre Aktivität ein, um auf Ihren Rundfunkempfänger zu warten ... // Führen Sie hier eine Logik aus, die sich auf empfangene Sendungen bezieht @Override public void onSampleDataReady (String someExampleData) { Log.d ("TAG", "Daten empfangen:" + someExampleData); }}}}

Antwort 2:

1.Mainactivity main = new MainActivity ()

Main.doSomeWork ():

Auf diese Weise können Sie nur diese (neue) Aktivitätsinstanz aufrufen. Dies funktioniert für Klassen, aber im Aktivitätsszenario möchten wir die aktuelle Instanz von Mainactivity (etwas auf dem Bildschirm wie eine Textansicht).

2. Sie können die Instanz von Mainactivity an eine andere Klasse übergeben und instance.doWork, () aufrufen.

Dies wird nicht empfohlen, da Sie einen Kontext übergeben und ihn möglicherweise am Leben erhalten, wenn er nicht benötigt wird.

3. Sie können in Mainactivity eine statische Methode erstellen und MainActivity.doSomeWork () aufrufen. Ihre Methode hat keinen Zugriff auf andere nicht statische Elemente.

4. Sie können die Schnittstelle in der Hauptaktivität implementieren und diese an die Klasse übergeben. Sie können interface.doSomeWork aufrufen. Dies ist in den meisten Situationen der beste Weg.

5. Erstellen Sie Mainactivty als Singleton und rufen Sie MainActivity.getInstance (). DoSomeWork () auf. Dies funktioniert gut für Controller-Klassen.

6. Erstellen Sie einen Rundfunkempfänger, registrieren Sie sich bei der Aktivität und rufen Sie ihn von der Klasse aus auf, für die Sie den Kontext benötigen.

7. Sie verwenden den Handler und übergeben Nachrichten.

8. Verwenden Sie eine Nachrichtenübermittlungsbibliothek wie Greenbot.


Antwort 3:

Definieren Sie eine öffentliche Methode in Ihrer Aktivität:

public void foo () { //Sachen}}

Dann in der Klasse:

((YourActivity) getActivity) .foo ();

Dies funktioniert für UI-Klassen wie Fragmente und DialogFragments.


Antwort 4:

Warum um alles in der Welt möchten Sie so etwas tun? Aktivitäten und Fragmente des Bestehens bestehen darin, nur die Benutzeroberfläche zu rendern.

In den meisten Fällen müssen Sie also nicht auf ihre Methoden zugreifen.

Wenn Sie eine gemeinsame Logik haben, die Sie verwenden möchten, versuchen Sie, diese mithilfe eines der Architekturentwurfsmuster MVP-MVVM- .. usw. Zu trennen


Antwort 5:

Sie können die Instanz der Hauptaktivität im Konstruktor dieser Klasse übergeben.

MyClass (Hauptaktivität Hauptaktivität,… ..)

{

this.mainactivity = mainactivity;

}}

mainactivity.method ();


Antwort 6:

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

startActivity (Absicht);

Hinweis: 'Kontext' kann je nach Situation unterschiedliche Werte haben. Bitte StackOverflow