android stúdíó hvernig á að kalla aðferð í annarri virkni


svara 1:

Ef þú ert að vísa í eitthvað eins og:

ný MainActivity (). doMyMethod ();

þá er þetta ekki hægt.

Raunverulega svarið fer algjörlega eftir því sem þú ert að reyna að ná. Það gæti verið að svarið feli í sér að vísa til verkefnis þíns í annan bekk, eða nota viðmót, eða nota EventBus eins og LocalBroadcastManager, eða hefja nýja virkni með fyrirætlun og einhvers konar fána sem send er í „auka“ búntinn, eða eitthvað allt annað.

Að bæta við meiri upplýsingum um það sem þú ert að reyna að ná í spurningalýsinguna hjálpar þér.

Breyta:

Nú þegar ég skil markmiðið er að kalla aðferð í aðgerð frá BroadcastReceiver, get ég útskýrt hvernig ég nota þetta viðmót næstum í þessu tilfelli. Hér er dæmi um þetta:

Búðu fyrst til viðmót til að senda gögnin sem þú vilt senda frá BroadcastReceiver. Hér er það til dæmis OnSampleReadyListener

opinber lokatími SampleReceiver framlengir BroadcastReceiver { public static final String SAMPLE_DATA_EXTRA = "sýnishorn_extra"; einkarekinn OnSampleReadyListener mlistener; @SuppressWarnings („ónotað“) opinber SampleReceiver () {} opinber SampleReceiver (OnSampleReadyListener hlustandi) { mlistener = hlustandi; } @ Yfirstjórn opinbert ógild á móttöku (samhengi samhengi, ásetningur) final String someExampleData = intention.getStringExtra (SAMPLE_DATA_EXTRA); mlistener.onSampleDataReady (someExampleData); } opinbert viðmót OnSampleReadyListener { ógilt onSampleDataReady (Strengja someExampleData); }}

Settu síðan upp Activity-bekkinn þinn til að standast dæmi um OnSampleReadyListener og settu upp Activity þína til að hlusta á útsendingar:

public class MainActivity lengir AppCompatActivity útfærir OnSampleReadyListener { einka SampleReceiver mReceiver; @ Yfirstjórn verndað tómarúm onCreate (@Nullable Bundle savedInstanceState) { super.onCreate (savedInstanceState); // Sendu dæmi af hlustandanum til móttakarans ... mReceiver = nýr SampleReceiver (þetta); }//..Settu upp virkni þína til að hlusta á útsendingar móttakara þína ... // Keyrðu allar rökfræði sem tengjast mótteknum útsendingum hér @ Yfirstjórn opinbert ógild áSampleDataReady (Strengja someExampleData) { Log.d ("TAG", "Gögn móttekin:" + sumirDæmi um gögn); }}

svara 2:

1. Aðalvirkni aðal = ný aðalvirkni ()

Main.doSomeWork ():

Þannig geturðu aðeins kallað þetta (nýja) athæfi. Þetta virkar fyrir námskeið en í atburðarás viljum við núverandi dæmi um Mainactivity (Eitthvað á skjánum núna eins og textasýn)

2. Þú getur komið tilvikinu Mainactivity yfir á annan flokk og hringt í dæmi.doWork, ()

Þetta er ekki ráðlagt vegna þess að þú munt standast samhengi og getur haldið því lifandi þegar þess er ekki þörf.

3. Þú getur búið til kyrrstæða aðferð í Mainactivity og hringt í MainActivity.doSomeWork (). Aðferð þín mun ekki hafa aðgang að öðru óstöðugu efni.

4. þú getur innleitt tengi í aðalvirkni og komið þessu til bekkjar. Þú getur hringt í interface.doSomeWork. Þetta er besta leiðin í flestum aðstæðum.

5. Búðu til Mainactivty sem singleton og hringdu í MainActivity.getInstance (). DoSomeWork (). Þetta virkar vel fyrir stjórnendaflokka.

6. Búðu til útsendingarmóttakara, skráðu þig með virkni og hringdu í það úr bekknum sem þú þarft samt.

7. Þú notar stjórnanda og sendir skilaboð.

8. Notaðu einhver skilaboðasafn eins og greenbot.


svara 3:

Skilgreindu opinbera aðferð í virkni þinni:

almennings ógilt foo () { // efni}

Síðan í bekknum:

((YourActivity) getActivity) .foo ();

Þetta virkar fyrir HÍ-flokka eins og brot og DialogFragments.


svara 4:

Hvers vegna í ósköpunum myndir þú vilja gera eitthvað slíkt, athafnir og brot ástæðunnar fyrir því að vera til er aðeins að gera HÍ.

Svo í flestum tilfellum þarftu ekki að fá aðgang að aðferðum þeirra.

Ef þú ert með sameiginlega rökfræði, viltu nota, reyndu að aðgreina hana með því að nota eitt af arkitektúrhönnunar mynstrunum MVP-MVVM- .. o.s.frv.


svara 5:

Þú getur staðist dæmi um aðalstarfsemi í smiðnum í þeim bekk.

MyClass (aðalvirkni, ... ..)

{

þetta.virkni = aðalvirkni;

}

mainactivity.method ();


svara 6:

Ásetningur = nýr ásetningur (samhengi, TargetActivity.class);

startActivity (ásetningur);

Athugið: „samhengi“ getur haft mismunandi gildi eftir aðstæðum. Vinsamlegast StackOverflow