android studio как да извикам метод в друга дейност


Отговор 1:

Ако имате предвид нещо като:

нов MainActivity (). doMyMethod ();

тогава това не е възможно.

Действителният отговор зависи изцяло от това, което се опитвате да постигнете. Възможно е отговорът да включва препращане на препратка към вашата активност към друг клас, или използване на интерфейс, или използване на EventBus като LocalBroadcastManager, или стартиране на нова дейност с намерение и някаква форма на флаг, предаден в нейния пакет „екстри“, или нещо съвсем друго.

Добавянето на повече информация за това, което се опитвате да постигнете, към описанието на въпроса ви ще помогне.

Редактиране:

Сега, когато разбирам, че целта е да се извика метод в Activity от BroadcastReceiver, мога да обясня как в този случай почти използвам интерфейс. Ето пример за това:

Първо създайте интерфейс за предаване на данните, които искате да изпратите от вашия BroadcastReceiver. Тук например е OnSampleReadyListener

публичен финален клас SampleReceiver разширява BroadcastReceiver { публичен статичен финален низ SAMPLE_DATA_EXTRA = "sample_extra"; частен OnSampleReadyListener mListener; @SuppressWarnings ("неизползвано") публичен SampleReceiver () {} публичен SampleReceiver (слушател OnSampleReadyListener) { mListener = слушател; } @Override public void onReceive (контекст на контекста, намерение за намерение) { заключителен низ someExampleData = intent.getStringExtra (SAMPLE_DATA_EXTRA); mListener.onSampleDataReady (someExampleData); } публичен интерфейс OnSampleReadyListener { void onSampleDataReady (String someExampleData); }}

След това настройте класа си за активност да предава екземпляр на OnSampleReadyListener и настройте своята активност да слуша излъчвания:

публичен клас MainActivity разширява AppCompatActivity реализира OnSampleReadyListener { частен SampleReceiver mReceiver; @Override защитена празнота onCreate (@Nullable Bundle savedInstanceState) { super.onCreate (savedInstanceState); // Предаваме екземпляр на слушателя на вашия приемник ... mReceiver = нов SampleReceiver (това); }//..Настройте вашата активност, за да слушате вашия приемник за излъчване ... // Изпълнете тук всякаква логика, свързана с получените предавания @Override public void onSampleDataReady (String someExampleData) { Log.d ("TAG", "Получени данни:" + someExampleData); }}

Отговор 2:

1. Основна активност main = нова MainActivity ()

Main.doSomeWork ():

По този начин можете да извикате само този (нов) екземпляр на дейност. Това работи за класове, но в сценарий на активност искаме текущ екземпляр на Mainactivity (Нещо на екрана в момента като текстов изглед)

2. Можете да предадете екземпляра на Mainactivity на друг клас и да извикате instance.doWork, ()

Това не се препоръчва, защото ще предадете контекст и може да го поддържате жив, когато не е необходим.

3. Можете да създадете статичен метод в Mainactivity и да извикате MainActivity.doSomeWork (). Вашият метод няма да има достъп до други нестатични неща.

4. можете да внедрите интерфейс в основната активност и да го предадете на класа. Можете да се обадите на interface.doSomeWork, Това е най-добрият начин да отидете в повечето ситуации.

5. Създайте Mainactivty като единичен и извикайте MainActivity.getInstance (). DoSomeWork (). Това работи добре за класовете на контролера.

6. Създайте излъчващ приемник, регистрирайте се с активност и го извикайте от класа, който ще ви трябва контекст.

7. Използвате манипулатор и предавате съобщения.

8. Използвайте някаква библиотека за предаване на съобщения като greenbot.


Отговор 3:

Определете публичен метод във вашата дейност:

public void foo () { // неща}

След това в класа:

((YourActivity) getActivity) .foo ();

Това работи за класове на потребителския интерфейс като фрагменти и диалогови фрагменти.


Отговор 4:

Защо, по дяволите, бихте искали да направите нещо подобно, причините за дейностите и фрагментите на съществуващите са да изобразявате само потребителски интерфейс.

Така че в повечето случаи не е нужно да имате достъп до техните методи.

Ако имате обща логика, която искате да използвате, опитайте да я разделите, като използвате един от моделите на архитектурен дизайн MVP-MVVM- .. и т.н.


Отговор 5:

Можете да предадете екземпляра на основна дейност в конструктора на този клас.

MyClass (Mainactivity mainactivity, ... ..)

{

this.mainactivity = основна активност;

}

mainactivity.method ();


Отговор 6:

Намерение за намерение = ново намерение (контекст, TargetActivity.class);

startActivity (намерение);

Забележка: „контекстът“ може да има различни стойности в зависимост от ситуацията. Моля, StackOverflow