Android, как завершить деятельность от другой деятельности - PullRequest
8 голосов
/ 22 сентября 2011

В моем приложении у меня есть 3 действия.

С 1-го занятия оно переходит на 2-е, а с 2-го - на 3-е.С 3-го он снова подходит к 1-му.и если я нажму кнопку возврата с 1-го, то он должен перейти на главный экран (приложение остановится).Если я нажимаю 1-ю клавишу «Назад», она снова переходит ко 2-му действию, а если я нажимаю 2-ю клавишу «Назад», она переходит к 1-му.Затем, если я нажимаю клавишу «Назад» 1-го, приложение останавливается.

Что я хочу, когда я нахожусь в третьем упражнении и нажимаю кнопку «Назад», тогда оно должно перейти в 1-е и одновременно завершить 2-е занятие.1006 * Как я могу это сделать?

Ответы [ 5 ]

16 голосов
/ 22 сентября 2011

просто завершите второе занятие, когда откроете третье занятие

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

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.

если вы хотите зависеть от какого-то условия, то от активности

setResult(123);

что-то вроде этого

теперь при переопределении onActivityResult во втором действии

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

также убедитесь, что вам нужно использовать startActivityForResult (intent, requestCode); для результата во втором действии, чтобы начать третье действие.

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);
            }
        });
    }
}
4 голосов
/ 22 сентября 2011

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

startActivityForResult(intent, 0)

Когда вы закончите свое третье занятие, вы должны указать:

setResult(RESULT_OK);
finish();

Посылает сигнал от 3-го действия ко 2-му.

Во 2-й день:

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

Он получает этот сигнал и заканчивает 2-е действие.

2 голосов
/ 22 сентября 2011

Вы должны запустить 1-е действие в 3-м действии с флагом cleartop, когда вам нужно закончить 2-е действие.

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.
    }
    .....
    ....
 }
1 голос
/ 20 ноября 2014

Используя этот способ: в первом упражнении объявите один объект Activity следующим образом:

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

теперь используйте этот объект в другом действии, чтобы завершить первое действие, как это

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

Дополнительная информация: Завершение действия из другого действия

1 голос
/ 22 сентября 2011

В качестве альтернативы, вы можете установить флаг намерения с именем FLAG_ACTIVITY_NO_HISTORY во 2-м действии. Таким образом, он не сохраняется в стеке истории, поэтому, когда вы вернетесь назад от третьего действия, оно перейдет прямо к первому.

например.

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

Это означает, что при запуске действия из SecondActivity SecondActivity будет завершено автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...