在BackStack中完成活动 - Android

时间:2014-01-08 12:26:22

标签: android android-activity

在我的应用程序中,我有活动A,B,C,D和E.第一个活动是A然后打开B然后是C和D.现在我的背堆是A-B-C-D。现在,当我从D移动到E时,我希望完成后台堆栈中的所有活动,现在E应该是堆栈中的第一个活动。

就我而言

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

android:launchMode="singleTask"

不起作用,因为我没有重新打开已经打开的活动。打开新活动时,我必须关闭后台堆栈中的所有活动。

请帮我这样做。

7 个答案:

答案 0 :(得分:1)

设置以下标志:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
Intent.FLAG_ACTIVITY_CLEAR_TASK);

FLAG_ACTIVITY_CLEAR_TASK可以从api 11获得。

答案 1 :(得分:0)

使用下面的完成。例如:如果要移动到B,例如:A-> B-> C-> D来自D而不是C,  然后使用下面的finish()。对于其他人保持原样,或者您也可以使用

android:noHistory="true" in manifest.

Intent i=new Intent(C.this,D.class);
startActivity(i);
finish(); 

如果您从D单击后退,C活动将不会被取代。它会跳到B活动,除非你在B中声明finish();时没有给出finish(),然后跳到A活动。同样你也可以这样做。或者您也可以使用android:noHistory="true"

Start Activity clearing top in Android

答案 2 :(得分:0)

ActivityE中使用以下代码...不要使用Intent.FLAG_ACTIVITY_NEW_TASK

    Intent intent = new Intent(this, ActivityD.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);

答案 3 :(得分:0)

是的,你可以做到。

While moving from A -> B, finish() A, and move to B.
While moving from B -> C, finish() B, and move to C.
While moving from C -> D, finish() C, and move to D.
While moving from D -> E, just move to E. (dont finish activity D)

这样,D将成为堆栈中的第一个活动。

答案 4 :(得分:0)

试试这个

 Intent i = new Intent(CurrentActivity.this,NextActivity.class);
    // Closing all the Activities
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
   // Add new Flag to start new Activity
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   // Staring NewActivity
    startActivity(i);
    finish();
清单中的

android:noHistory="true"

答案 5 :(得分:0)

在转移到活动E时,没有完成你的活动D. 表示删除标记行Intent.FLAG_ACTIVITY_NEW_TASK

只写

Intent intent = new Intent(this, ActivityD.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

并在清单中添加第android:noHistory="true"行。

答案 6 :(得分:0)

编辑最终答案

ActivitA重要

    import java.util.Calendar;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;

import android.content.Context;
import android.content.Intent;

import android.view.View;
import android.widget.Button;


public class ActivityA extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        if (getIntent().getBooleanExtra("EXIT", false)) {
            startActivity(new Intent(ActivityA.this,ActivityE.class));
            finish();
        }  

        setContentView(R.layout.alayout);

        Button play;

        play = (Button) findViewById(R.id.aId);     

        play.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            startActivity(new Intent(ActivityA.this,ActivityB.class));

        }

        });


    }

}

<强> ActivityB

    import java.util.Calendar;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;

import android.content.Context;
import android.content.Intent;

import android.view.View;
import android.widget.Button;


public class ActivityB extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        if (getIntent().getBooleanExtra("EXIT", false)) {
            finish();
        }  

        setContentView(R.layout.blayout);

        Button play;

        play = (Button) findViewById(R.id.bId);     

        play.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            startActivity(new Intent(ActivityB.this,ActivityC.class));

        }

        });


    }

}

<强> ActivityC

import java.util.Calendar;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;

import android.content.Context;
import android.content.Intent;

import android.view.View;
import android.widget.Button;


public class ActivityC extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        if (getIntent().getBooleanExtra("EXIT", false)) {
            finish();
        }  

        setContentView(R.layout.clayout);

        Button play;

        play = (Button) findViewById(R.id.cId);     

        play.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            startActivity(new Intent(ActivityC.this,ActivityD.class));

        }

        });


    }

}

活动D重要

import java.util.Calendar;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;

import android.content.Context;
import android.content.Intent;

import android.view.View;
import android.widget.Button;


public class ActivityD extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        if (getIntent().getBooleanExtra("EXIT", false)) {
            finish();
        }  

        setContentView(R.layout.dlayout);

        Button play;

        play = (Button) findViewById(R.id.dId);     

        play.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            Intent intent = new Intent(getApplicationContext(),ActivityA.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
              intent.putExtra("EXIT", true);
               startActivity(intent);

               finish();

        }

        });


    }

}

<强> ActivityE

import java.util.Calendar;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;

import android.content.Context;
import android.content.Intent;

import android.view.View;
import android.widget.Button;


public class ActivityE extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        if (getIntent().getBooleanExtra("EXIT", false)) {
            finish();
        }  

        setContentView(R.layout.elayout);

        Button play;

        play = (Button) findViewById(R.id.eId);     

        play.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            //startActivity(new Intent(ActivityE.this,ActivityE.class));

        }

        });


    }

}

就这样做