Завершить действие из другого действия

У меня есть 3 действия A, B и C. A ведет к B, что приводит к C. Я хотел бы иметь возможность перемещаться между A и B, но я хочу закончить и A и B, как только C начнется. Я понимаю, как закрыть B при запуске C через намерение, но как мне также закрыть A, когда C запускается?

3 ответа

Решение

В вашем onCreate() Метод присваивает статический экземпляр переменной для создания Singleton:

public static ActivityA instance = null;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    instance = this;
}

@Override
public void finish() {
    super.finish();
    instance = null;
}

затем в C:

public void onCreate(Bundle savedInstanceState) {
    if(ActivityA.instance != null) {
        try {  
            ActivityA.instance.finish(); 
        } catch (Exception e) {}
    }
}

(Повторите код выше для B, а также A)

Я бы сказал, что это НЕ элегантно и неизбежно приводит к ошибкам в жизненном цикле.

Было бы лучше, если бы вы могли изменить свое требование - если вы не можете, возможно, вы можете использовать одну активность и изменить A, B и C на Fragments?

Я бы предложил широковещательную рассылку, но, насколько я понимаю, у вас не может быть приемников широковещательной передачи уровня экземпляра для "не возобновленных" операций.

Используя Service привязка к действиям кажется излишним - но вы можете подумать об этом, если вышеперечисленное не работает.

Удачи!

((Activity)context_of_another_activity).finish();

Я понимаю, что это очень запоздалый ответ, но чувствую BroadcastReceiver - лучший подход к этому вопросу.

В действии A добавьте это

    //class object
    BroadcastReceiver receiver;

    //add this to onCreate()
    receiver =new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            finish();
        }
    };
    IntentFilter filter =new IntentFilter();
    filter.addAction("FINISH_A");
    registerReceiver(receiver, filter);

   //add this to Activity A as well
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }

Затем в Activity C onCreate() (или когда вы захотите завершить действие A)

Intent local =new Intent();
    local.setAction("FINISH_A");
    sendBroadcast(local);

Когда вы запускаете C из B, сделайте это следующим образом:

Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Теперь C начинается, но A и B исчезают.

Тем не менее, я думаю, что было бы лучше, если бы вы могли переосмыслить свой дизайн так, чтобы C не зависел от того, был ли A закончен или нет.

Другие вопросы по тегам