Экземпляр родительской активности Android

#java #android #android-activity #android-intent

#java #Android #android-активность #android-намерение

Вопрос:

У меня есть 2 действия, например, A и B. Я перехожу к действию B в рамках действия A, используя startActivity()

Мой вопрос в том, когда я выполняю действие B, как я могу получить доступ к действию A?

Спасибо,

Ответ №1:

Для доступа к функциональности, которая является общей для действий, рекомендуется перенести эту функциональность в класс Application или какую-либо другую форму Singleton. Причиной этого является жизненный цикл действия, который не позволяет вам быть уверенным, что завершенное действие все еще существует, пока выполняется сфокусированное действие. Итак, вам нужно использовать объект, который может быть постоянным между действиями, даже Activity.finish() вызывается для любого действия.

Вот документация по классу Application. http://developer.android.com/reference/android/app/Application.html

Вы можете получить доступ к приложению из любого действия, вызвав

 this.getApplication();
  

Ответ №2:

Это действительно зависит от того, что вы хотите сделать, и почему вы считаете, что вам нужен этот доступ. Одна вещь, которую вы можете сделать, это передать данные в действие, используя intent.putExtra , а затем startActivityForResult и прослушивать результаты onActivityResult . Можете ли вы предоставить больше информации о том, что именно вы хотите сделать?

Чтобы выполнить метод при завершении действия, вызовите «дочернее» действие следующим образом:

 Intent child = new Intent(this, ChildActivity.class);
startActivityForResult(child, CHILD_CODE);
  

где CHILD_CODE — неотрицательное целое поле. Теперь вам нужно установить результат в «дочерней» активности (той, с которой вы начали onActivityResult ).

     Intent resultIntent = new Intent();
    setResult(Activity.RESULT_OK, resultIntent);
    finish();
  

теперь в вашей «родительской» активности реализуйте onActivityResult метод следующим образом:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
    case CHILD_CODE:
        if (resultCode == Activity.RESULT_OK) {
            yourMethod();
        }
    }
}
  

Комментарии:

1. Спасибо за ваш ответ, то, что я хочу сделать, это вызвать метод для действия A внутри действия B,

2. @GuyDor: Я не думаю, что это хорошая идея. В зависимости от режима запуска активности, который настроен в манифесте, может быть более одного экземпляра активности. Может быть, вам лучше реализовать необходимую функциональность в расширенном приложении?

3. Использовать методы, принадлежащие другому Activity , плохо и действительно плохо. Это противоречит концепции разработки программного обеспечения, плохой практике. Вместо этого сделайте слабую связь.

4. Спасибо, так есть ли какой-нибудь способ определить, когда я выполняю действие B ‘finish ()’, чтобы я мог вызвать свой метод для действия A???

Ответ №3:

Почему бы вам не использовать одноэлементный класс, к которому могут обращаться оба Activity?