Finish activity from another activity

13,110

Solution 1

In your onCreate() method assign a static instance to a variable to create a Singleton:

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

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

then in C:

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

(Repeat above code for B as well as A)

I would say this is NOT elegant and is bound to introduce strange lifecycle bugs.

It would be better if you could tweak your requirement - if you can't you could perhaps use a single Activity and change A, B and C into Fragments?

I would have suggested a Broadcast but as I understand it you can't have instance level broadcast receivers on "non resumed" Activities.

Using a Service to bind to the Activities seems like overkill - but you might want to consider that if the above doesn't work.

Good luck!

Solution 2

((Activity)context_of_another_activity).finish();

Solution 3

I realize this is a very late response, but I feel the BroadcastReceiver is the best approach to this question.

In Activity A add this

    //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);
    }

Then, in Activity C onCreate() (or when ever you want to finish Activity A)

Intent local =new Intent();
    local.setAction("FINISH_A");
    sendBroadcast(local);
Share:
13,110
duncanportelli
Author by

duncanportelli

Updated on June 24, 2022

Comments

  • duncanportelli
    duncanportelli about 2 years

    I have 3 activities A, B and C. A leads to B which leads to C. I would like to be able to move back and forth between A and B but I want to finish both A and B once C gets started. I understand how to close B when starting C via the intent but how do I also close A when C gets started?

  • David Wasser
    David Wasser about 11 years
    No, using your code C would not start. B would be finished and A would also be finished and then another instance of A would be created (based on using Intent.FLAG_ACTIVITY_CLEAR_TOP)
  • Niko Adrianus Yuwono
    Niko Adrianus Yuwono over 9 years
    Please explain more about it so the asker can understand your answer