android studio kuidas meetodit teises tegevuses kutsuda


Vastus 1:

Kui peate silmas midagi sellist:

uus MainActivity (). doMyMethod ();

siis pole see võimalik.

Tegelik vastus sõltub täielikult sellest, mida proovite saavutada. Võib juhtuda, et vastus hõlmab viite oma tegevusele teisele klassile edastamist või liidese kasutamist või EventBusi kasutamist, näiteks LocalBroadcastManager, või uue tegevuse alustamist kavatsusega ja mingisuguse lipuga, mis on selle lisakomplekti lisatud. või midagi muud täiesti.

See aitab lisada küsimuse kirjeldusele lisateavet selle kohta, mida proovite saavutada.

Muuda:

Nüüd, kui saan aru, et eesmärk on kutsuda meetod BroadcastReceiveri tegevuses, saan selgitada, kuidas antud juhul peaaegu liidest kasutan. Siin on näide selle teose kohta:

Kõigepealt looge liides andmete edastamiseks, mida soovite BroadcastReceiverilt saata. Näiteks siin on see OnSampleReadyListener

avalik lõpuklass SampleReceiver laiendab BroadcastReceiver { avalik staatiline lõplik string String SAMPLE_DATA_EXTRA = "sample_extra"; privaatne OnSampleReadyListener mListener; @SuppressWarnings ("kasutamata") public SampleReceiver () {} public SampleReceiver (OnSampleReadyListener kuulaja) { mlistener = kuulaja; } @ Alista public void onReceive (konteksti kontekst, kavatsuse kavatsus) { lõplik string String someExampleData = intent.getStringExtra (SAMPLE_DATA_EXTRA); mListener.onSampleDataReady (mõnedExampleData); } avalik liides OnSampleReadyListener { void onSampleDataReady (String someExampleData); }}

Seejärel seadistage oma tegevusklass OnSampleReadyListeneri eksemplari läbimiseks ja seadistage oma tegevus ülekannete kuulamiseks:

avalik klass MainActivity laiendab rakenduse AppCompatActivity rakendusi OnSampleReadyListener { privaatne SampleReceiver mReceiver; @ Alista kaitstud void onCreate (@Nullable Bundle savedInstanceState) { super.onCreate (salvestatudInstanceState); // Edastage kuulaja eksemplar oma vastuvõtjale ... mReceiver = uus SampleReceiver (see); }//..Seadistage oma tegevus Broadcast Receiveri kuulamiseks ... // Käivitage siin vastuvõetud ülekannetega seotud loogika @ Alista public void onSampleDataReady (String someExampleData) { Log.d ("TAG", "Saadud andmed:" + mõnedExampleData); }}

Vastus 2:

1. Põhitegevus = uus MainActivity ()

Main.doSomeWork ():

Nii saate helistada ainult sellele (uuele) tegevuse eksemplarile. See töötab klasside jaoks, kuid tegevusstsenaariumi korral soovime praegust peamist aktiivsust (praegu on ekraanil midagi nagu tekstivaade)

2. Võite edastada Mainactivity'i eksemplari teistele klassidele ja helistada instance.doWork, ()

Seda ei soovitata, sest läbite konteksti ja võite selle elus hoida, kui seda pole vaja.

3. Saate luua staatilise meetodi jaotises Mainactivity ja kutsuda MainActivity.doSomeWork (). Teie meetodil pole juurdepääsu muudele mittestaatilistele asjadele.

4. saate liidese põhitegevuses rakendada ja selle klassile edasi anda. Võite helistada interface.doSomeWork. See on parim viis enamikus olukordades edasi liikuda.

5. Looge Mainactivty üksikuna ja helistage MainActivity.getInstance (). DoSomeWork (). See sobib hästi kontrolleriklasside jaoks.

6. Looge ringhäälinguvastuvõtja, registreeruge tegevustega ja helistage sellele klassist, mida siiski konteksti vajate.

7. Kasutate käitlejaid ja edastate teateid.

8. Kasutage mõnda sõnumit edastavat teeki, näiteks greenbot.


Vastus 3:

Määrake oma tegevuses avalik meetod:

public void foo () { // värk}

Siis klassis:

[[YourActivity] getActivity] .foo ();

See töötab kasutajaliidese klassides nagu Fragments ja DialogFragments.


Vastus 4:

Miks sa tahaksid Maal midagi sellist teha, on olemasolevate tegevuste ja killukese põhjuseks ainult kasutajaliidese renderdamine.

Nii et enamikul juhtudel pole teil vaja nende meetoditele juurde pääseda.

Kui teil on ühine loogika, soovite seda kasutada, proovige see eraldada, kasutades ühte arhitektuuri kujundusmustritest MVP-MVVM- jne.


Vastus 5:

Põhitegevuse eksemplari saate läbida selle klassi konstruktoris.

MyClass (põhitegevus, ... ..)

{

see.tegevus = peaaktiivsus;

}

põhitegevus.metoodika ();


Vastus 6:

Intent kavatsus = new Intent (kontekst, TargetActivity.class);

startActivity (kavatsus);

Märkus: kontekstil võib olenevalt olukorrast olla erinev väärtus. Palun StackOverflow