Jyosna
Jyosna

Reputation: 4446

android how to finish an activity from other activity

In my app i have 3 activities.

From 1st activity it goes to 2nd and from 2nd it goes to 3rd. From 3rd it is coming to 1st again. and if I press back key from the 1st then it should go to home screen (App will stop). If I press back key of 1st its goes to 2nd activity again and if I press 2nd's back key, then it goes to the 1st . Then if I press back key of 1st then app stops.

What I want , when I am in 3rd activity and press the back button then it should go to 1st and simultaneously finish the 2nd activity.

How can I do that?

Upvotes: 8

Views: 28604

Answers (5)

Ron
Ron

Reputation: 24235

You should launch the 1st activity in 3rd activity with the cleartop flag when you need to finish the 2nd activity.

class ThirdActivity extends Activity {
    ....
    if (somecondition) { 
         /* directly go to FirstActivity, finish all intermediate ones.*/
        Intent intent = new Intent(this, FirstActivity.Class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    } else {
        finish(); // to simply return to 2nd activity.
    }
    .....
    ....
 }

Upvotes: 2

Phong NGUYEN
Phong NGUYEN

Reputation: 199

Using this way: In your first activity, declare one Activity object like this,

public static Activity fa;
onCreate()
{
    fa = this;
}

now use that object in another Activity to finish first-activity like this,

onCreate()
{
    FirstActivity.fa.finish();
}

More information : Finish an activity from another activity

Upvotes: 1

beni
beni

Reputation: 3029

When you start your third activity you should call in your 2nd acitivity like this:

startActivityForResult(intent, 0)

When you finish your 3rd activity, you should include:

setResult(RESULT_OK);
finish();

It sends a signal from the 3rd activity to the 2nd.

In the 2nd put:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     finish();
}

It receives this signal and finishes the 2nd activity.

Upvotes: 4

ud_an
ud_an

Reputation: 4921

just finish the second activity when you open third activity

suppose in second activity on some button click you are opening third activity using start activity;

startActivity(intent);
finish();//this will finish second activity and open third activity so when you press back from third activity it will open first activity.

if you want depended on some condition then on activity

setResult(123);

something code like this

now when override onActivityResult in second activity

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==123){
            //finish
        }
    }

also make sure one thing you need to use startActivityForResult(intent, requestCode); for result in second activity to start third activity.

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Activity2 extends Activity{

    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main1);

        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                startActivityForResult(new Intent(new Intent(Activity2.this,Activity3.class)), 12);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if(resultCode==123 && requestCode==12){
            finish();
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
}


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Activity3 extends Activity{

    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main1);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                setResult(123);
            }
        });
    }
}

Upvotes: 17

Robert
Robert

Reputation: 38223

Alternatively, you could set an intent flag called FLAG_ACTIVITY_NO_HISTORY on the 2nd Activity. This way it is not kept in the history stack so when you navigate back from the 3rd activity it will go straight to the 1st.

E.g.

Intent intent = new Intent(this, SecondActivity.Class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);

This means that when you launch an activity from the SecondActivity the SecondActivity will be finished automatically.

Upvotes: 1

Related Questions