Android: метод доступа к действию из другого действия - PullRequest
1 голос
/ 03 августа 2011

Моя операция запуска запускает другую операцию, запуск которой настроен на один экземпляр. В этом втором упражнении у меня есть публичный метод. Затем я запускаю третье действие, и это действие должно получить доступ к общедоступному методу во втором упражнении. Я не хочу использовать startActivity и передавать его отдельно, потому что я предполагаю, что будет вызван onCreate (или я ошибаюсь?), И мне нужно не допустить повторной инициализации второго действия.

Когда действие начинается с startActivit y, возможно ли получить доступ к самому экземпляру базового класса и просто вызвать метод?

Ответы [ 4 ]

3 голосов
/ 05 августа 2011

Я действительно придумал простое решение.На самом деле вы можете получить доступ к базовому классу действия.Сначала вы создаете класс, который используется для хранения общедоступной статической ссылки на мероприятие 2. При создании занятия 2 в его методе onCreate вы сохраняете «this» в статической ссылке.Упражнение 2 реализует интерфейс с методами, которые вы хотите сделать доступными для любого другого действия или объекта.Статическая ссылка, которую вы держите, будет иметь тип данных этого интерфейса.Когда другое действие хочет вызвать метод в этом действии, оно просто обращается к общедоступной статической ссылке и вызывает метод.Это не хакерство, а неотъемлемая часть работы Java и вполне законно.

1 голос
/ 03 августа 2011

Это не очень хорошая идея.Как я понимаю, метод из второго действия на самом деле не связан с конкретным действием, в то время как вы хотите вызвать его из другого.Поэтому перенесите метод в другой (неактивный) класс (может быть, в статический метод) и используйте его в обоих действиях.

0 голосов
/ 03 августа 2011

Нет, нет способа передать ссылку через startActivity (), однако вы можете использовать какую-то разделяемую память для хранения ссылки на свою активность. Это, вероятно, плохой дизайн. Однако передача дополнительного с вашим намерением не вызовет onCreate, что полностью связано с жизненным циклом.

0 голосов
/ 03 августа 2011

Невозможно напрямую получить доступ к объекту активности, запущенному с использованием startActivity (без использования некоторых хаков). И, честно говоря, вы не должны даже пытаться достичь этого.

Один компонент Activity может циклически проходить через несколько Java-объектов Activity, пока он жив. Например, когда пользователь поворачивает экран, старый объект отбрасывается и создается новый объект действия. Но это все еще один компонент Activity.

По моему опыту, когда вам нужно сделать то, что вы описали, в вашей архитектуре что-то не так. Вы должны либо перенести часть обязанностей в Сервис, либо в ContentProvider, либо использовать Intents и т. Д. Трудно рекомендовать что-то более конкретное, не зная более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...