android studio hogyan hívhatunk meg egy módszert egy másik tevékenységben


Válasz 1:

Ha ilyesmire hivatkozik:

új MainActivity (). doMyMethod ();

akkor ez nem lehetséges.

A tényleges válasz teljesen attól függ, hogy mit akar elérni. Előfordulhat, hogy a válasz magában foglalja a tevékenységére való hivatkozás átadását egy másik osztálynak, vagy egy felület használatát, vagy egy EventBus használatát, mint például a LocalBroadcastManager, vagy egy új tevékenység elindítását egy szándékkal és valamilyen zászlóval, amelyet az „extrák” csomagba továbbítanak, vagy valami egészen más.

Segít abban, hogy további információkat adjon arról, hogy mit szeretne elérni a kérdésleíráshoz.

Szerkesztés:

Most, hogy megértettem a célt, hogy metódust hívjak meg egy BroadcastReceiver tevékenységéből, elmagyarázhatom, hogy ebben az esetben miként használok majdnem egy interfészt. Íme egy példa erre a munkára:

Először hozzon létre egy interfészt a BroadcastReceiver-ről küldeni kívánt adatok továbbításához. Itt van például az OnSampleReadyListener

nyilvános végső osztály a SampleReceiver kiterjeszti a BroadcastReceiver { public static final String SAMPLE_DATA_EXTRA = "minta_extra"; privát OnSampleReadyListener mlistener; @SuppressWarnings ("fel nem használt") public SampleReceiver () {} public SampleReceiver (OnSampleReadyListener hallgató) { mlistener = hallgató; } @ Felülírás public void onReceive (Kontextus kontextus, Intent szándék) { végső karakterlánc someExampleData = szándék.getStringExtra (SAMPLE_DATA_EXTRA); mListener.onSampleDataReady (someExampleData); } nyilvános felület OnSampleReadyListener { void onSampleDataReady (String someExampleData); }}

Ezután állítsa be a tevékenységi osztályát az OnSampleReadyListener példányának átadásához, és állítsa be a tevékenységét a közvetítések hallgatásához:

a public class MainActivity kiterjeszti az AppCompatActivity megvalósítja az OnSampleReadyListener { privát SampleReceiver mReceiver; @ Felülírás védett void onCreate (@Nullable Bundle savedInstanceState) { super.onCreate (savedInstanceState); // Adja át a hallgató egy példányát a vevőjéhez ... mReceiver = új SampleReceiver (ez); }//..A tevékenység beállítása a Broadcast Receiver meghallgatásához ... // Itt futtathat bármilyen logikát a fogadott adásokkal kapcsolatban @ Felülírás public void onSampleDataReady (String someExampleData) { Log.d ("TAG", "Fogadott adatok:" + néhányExampleData); }}

Válasz 2:

1. Főaktivitás = új MainActivity ()

Main.doSomeWork ():

Így csak ezt a tevékenység új (új) példányát hívhatja. Ez az osztályoknál működik, de tevékenységi szcenárióban szeretnénk a mainaktivitás aktuális példányát (Valami olyan van a képernyőn, mint egy szövegnézet)

2. Átadhatja a Mainactivity példányát más osztálynak, és meghívhatja az instance.doWork, ()

Ez nem ajánlott, mert átad egy kontextust, és életben tarthatja azt, amikor nincs rá szükség.

3. Létrehozhat egy statikus módszert a Mainactivity oldalon, és meghívhatja a MainActivity.doSomeWork () fájlt. A módszer nem fér hozzá más, nem statikus tartalmakhoz.

4. megvalósíthatja az interfészt a főaktivitásban, és átadhatja ezt az osztálynak. Hívhatja az interface.doSomeWork alkalmazást. Ez a legjobb módszer a legtöbb helyzetben.

5. Hozza létre a Mainactivty-t szingulettként, és hívja meg a MainActivity.getInstance (). DoSomeWork () parancsot. Ez jól működik a vezérlő osztályoknál.

6. Hozzon létre sugárzó vevőt, regisztráljon egy tevékenységet, és hívja meg abból az osztályból, amelyre szüksége lesz.

7. Kezelő és továbbított üzeneteket használ.

8. Használjon üzenetküldő könyvtárat, például a greenbot-ot.


Válasz 3:

Nyilvános módszer meghatározása a tevékenységében:

public void foo () { //dolog}

Aztán az osztályban:

((YourActivity) getActivity) .foo ();

Ez olyan felhasználói felület osztályoknál működik, mint a Fragments és a DialogFragments.


Válasz 4:

Miért szeretne a Földön ilyesmit csinálni, a tevékenységek és a meglévő részek oka csak a felhasználói felület megjelenítését jelenti.

Tehát a legtöbb esetben nem kell hozzáférnie a módszereikhez.

Ha van közös logikája, használni kívánja, próbálja meg szétválasztani az MVP-MVVM- stb. Architektúra-tervezési minták egyikével.


Válasz 5:

Átadhatja a fő tevékenység példányát az adott osztály konstruktorában.

MyClass (Főaktivitás, ... ..)

{

ez.tevékenység = főaktivitás;

}

főaktivitás.módszer ();


Válasz 6:

Intent szándék = new Intent (kontextus, TargetActivity.class);

startActivity (szándék);

Megjegyzés: A „kontextus” értéke a helyzettől függően eltérő lehet. Kedves StackOverflow