android studio kako nazvati metodu u drugoj aktivnosti


Odgovor 1:

Ako mislite na nešto poput:

nova MainActivity (). doMyMethod ();

onda ovo nije moguće.

Stvarni odgovor u potpunosti ovisi o tome što pokušavate postići. Može biti da odgovor uključuje prosljeđivanje reference na vašu aktivnost drugom razredu ili upotrebu sučelja ili upotrebu EventBusa poput LocalBroadcastManager-a ili pokretanje nove aktivnosti s namjerom i nekim oblikom zastave koji je proslijeđen u njen "dodaci" paket, ili nešto sasvim drugo.

Pomoći će vam dodavanje više informacija o tome što pokušavate postići opisu vašeg pitanja.

Uredi:

Sad kad razumijem da je cilj pozvati metodu u Aktivnost iz BroadcastReceivera, mogu objasniti kako u ovom slučaju gotovo koristim sučelje. Evo primjera ovog djela:

Prvo stvorite sučelje za prijenos podataka koje želite poslati s vašeg BroadcastReceivera. Evo, na primjer, OnSampleReadyListener

javni završni razred SampleReceiver proširuje BroadcastReceiver { javni statički završni niz SAMPLE_DATA_EXTRA = "sample_extra"; privatni OnSampleReadyListener mListener; @SuppressWarnings ("neiskorišteno") javni SampleReceiver () {} javni SampleReceiver (slušalac OnSampleReadyListener) { mListener = slušatelj; } @Preuzmi javna praznina onReceive (kontekst konteksta, namjera namjere) { završni niz someExampleData = intent.getStringExtra (SAMPLE_DATA_EXTRA); mListener.onSampleDataReady (nekiExampleData); } javno sučelje OnSampleReadyListener { void onSampleDataReady (String someExampleData); }}

Zatim postavite svoju aktivnost klasu da prosljeđuje instancu OnSampleReadyListener i postavite svoju aktivnost da sluša emitiranja:

javna klasa MainActivity proširuje AppCompatActivity implementira OnSampleReadyListener { privatni SampleReceiver mReceiver; @Preuzmi zaštićena praznina onCreate (@Nullable Bundle savedInstanceState) { super.onCreate (savedInstanceState); // Proslijedite instancu slušatelja na vaš prijemnik ... mReceiver = novi SampleReceiver (ovaj); }//..Postavite svoju Aktivnost da biste slušali svoj prijemnik za emitiranje ... // Ovdje pokrenite bilo koju logiku povezanu s primljenim emisijama @Preuzmi javna praznina onSampleDataReady (String someExampleData) { Log.d ("TAG", "Primljeni podaci:" + nekiExampleData); }}

Odgovor 2:

1.Mainactivity main = nova MainActivity ()

Main.doSomeWork ():

Na ovaj način možete nazvati samo ovu (novu) instancu aktivnosti. To radi za klase, ali u scenariju aktivnosti želimo trenutnu instancu Mainactivity-a (nešto na zaslonu trenutno poput tekstualnog prikaza)

2. Možete proslijediti instancu Mainactivity drugoj klasi i pozvati instance.doWork, ()

To se ne savjetuje jer ćete prenijeti kontekst i možda ćete ga održati na životu kad nije potreban.

3. Možete stvoriti statičku metodu u Mainactivity-u i pozvati MainActivity.doSomeWork (). Vaša metoda neće imati pristup drugim nestatičnim stvarima.

4. možete implementirati sučelje u glavnu aktivnost i proslijediti ga klasi. Možete nazvati interface.doSomeWork.To je najbolji način za kretanje u većini situacija.

5. Stvorite Mainactivty kao singleton i pozovite MainActivity.getInstance (). DoSomeWork (). To dobro radi za klase kontrolera.

6. Stvorite prijemnik za emitiranje, registrirajte se za aktivnost i nazovite ga iz razreda koji će vam trebati kontekst.

7. Koristite rukovatelj i prosljeđujete poruke.

8. Upotrijebite neku biblioteku za prosljeđivanje poruka poput greenbota.


Odgovor 3:

U svojoj aktivnosti definirajte javnu metodu:

javna void foo () { //stvari}

Zatim u razredu:

((VašaAktivnost) getActivity) .foo ();

To radi za UI klase poput Fragmenti i DialogFragmenti.


Odgovor 4:

Zašto biste, pobogu, željeli učiniti nešto poput ovoga, razlog postojećih aktivnosti i fragmenata je prikazivanje samo korisničkog sučelja.

Dakle, u većini slučajeva ne trebate pristupiti njihovim metodama.

Ako imate zajedničku logiku, koju želite koristiti, pokušajte je odvojiti pomoću jednog od uzoraka arhitektonskog dizajna MVP-MVVM- .. itd.


Odgovor 5:

Primjer glavne aktivnosti možete proslijediti u konstruktoru te klase.

MyClass (Mainactivity mainactivity, ... ..)

{

this.mainactivity = mainactivity;

}

mainactivity.method ();


Odgovor 6:

Namjera namjere = nova namjera (kontekst, TargetActivity.class);

startActivity (namjera);

Napomena: 'kontekst' može imati različite vrijednosti ovisno o situaciji. Ljubazno StackOverflow