Search code examples
androidandroid-activityactivity-finish

Finish activity from another activity


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?


Solution

  • 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!