首页 文章

清除活动历史堆栈

提问于
浏览
4

我正在尝试清除活动历史堆栈,当用户点击 logout button 时甚至尝试了 IntentFlag Intent.FLAG_ACTIVITY_NO_HISTORY 但没有运气 . 看看我下面提到的场景 .

1)登录界面(通话结束)

2)第一个屏幕(不叫完成)

3)第二个屏幕(不叫完成)

4)第三屏(不叫完成)

5)退出屏幕(将打开登录界面,完成)

为了实现我的目标m使用下面的代码,

Login screen

btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,FirstActivity.class);
                startActivity(intent);
                finish();

            }
        });

登录回事件

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {

        if (getIntent().getBooleanExtra("EXIT", false)) {
            this.finish();
        }else{
            this.finish();
        }
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

First screen

btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
                startActivity(intent);

            }
        });

Second screen

btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent=new Intent(SecondActivity.this,ThirdActivity.class);
                startActivity(intent);

            }
        });

Third screen

btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent=new Intent(ThirdActivity.this,MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra("EXIT", true);
                startActivity(intent);
                finish();

            }
        });

问题是,当我点击退出时,它进入登录活动,当我点击后退按钮时,它进入第二个活动 .

为什么它没有完成活动,也为什么它去 second activity 如果它保持堆栈然后它应该转到 first activity 而不是第二个当我从 login screen 点击回来,不知道我错过了什么样的东西 .

Updated

如果我从登录屏幕调用意图时删除 finish() ,一切正常,但我不想保持在堆栈登录屏幕 .

你的建议很有意义 .

4 回答

  • 4

    你可以为这个问题做一个技巧 . 我用过它并且和我一起工作 .

    写下面的代码行 inside your ThirdActivity onclick .

    btn.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(ThirdActivity.this,FirstActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.putExtra("GO", false);
                startActivity(intent);
                finish();
    
            }
        });
    

    OnCreate of FirstActivity Class: 内写下代码之后

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
    
            // Getting the Value of GO
            GO = getIntent().getExtras().getBoolean("GO");
    
                 if(GO){
            setContentView(R.layout.form_data);
                ...
                // Here your Code for this Activity 
                ...
                }else{
                Intent intent=new Intent(FirstActivity.this,MainActivity.class);
                startActivity(intent);
               finish();
               }
    }
    

    Also put Extra value of GO as true while calling FirstActivity from MainActivity as Below

    btn.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    Intent intent=new Intent(MainActivity.this,FirstActivity.class);
                     intent.putExtra("GO", true);
                    startActivity(intent);
                    finish();
    
                }
            });
    

    希望它能解决你的问题 .

  • 0

    将意图平面 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 更改为 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 并尝试 . 我希望它能起作用并帮助你 .

    Clear Top仅在您调用的Activity位于BackStack中时才有效 . 由于LoginActivity不在BackStack中,因此不会清除活动 .

    AndroidManifest.xml 中的LoginActivity添加 android:noHistory="true" 并尝试 . 我在看到您更新的问题后给出了此更新 .

  • 3

    Third screen

    btn.setOnClickListener(new OnClickListener()
       {
    
            @Override
            public void onClick(View v) 
            {
                Intent intent=new Intent(ThirdActivity.this,MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_TASK_ON_HOME);          
                intent.putExtra("EXIT", true);
                startActivity(intent);
                finish();
    
            }
        });
    
  • -1

    最后我得到了一个解决方案,无论如何!它实现了我的目标,在自己的活动中创建活动的静态对象,并且对于所有活动注销 object.finish() ,它工作正常 .

    以下是实现目标的诀窍

    在第一个活动中声明 public static FirstActivity first; 并在 onCreate 内同意 first=this; 我也为其他活动做了同样的事情,当退出时,确实如下所示 .

    btn.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
    
                    Intent intent = new Intent(ThirdActivity.this,
                            MainActivity.class);
                    FirstActivity.first.finish();
                    SecondActivity.second.finish();
    
                    startActivity(intent);
                    finish();
    
                }
            });
    

相关问题