4

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

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

2)第一个屏幕(不调用完成)

3)第二个屏幕(不调用完成)

4)第三屏(未调用完成)

5)注销屏幕(它将打开登录屏幕,然后完成)

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

登录画面

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);
}

第一个屏幕

btn.setOnClickListener(new OnClickListener() {

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

            }
        });

第二屏

btn.setOnClickListener(new OnClickListener() {

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

            }
        });

第三屏

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 activitylogin screen

更新

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

你的建议是可取的。

4

4 回答 4

4

你可以为这个问题做一个技巧。我已经使用过它并且可以很好地与我合作。

在您的 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();

        }
    });

在FirstActivity 类的 OnCreate 中编写以下代码后:

    @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();
           }
}

在从 MainActivity 调用 FirstActivity 时,也将 GO 的 Extra 值设置为 true,如下所示

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();

            }
        });

希望它能解决您的问题。

于 2013-01-05T08:04:58.653 回答
3

将意图intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);改为intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);并尝试。我希望它有效并帮助你。

只有当您调用的 Activity 在 BackStack 中时,Clear Top 才会起作用。由于 LoginActivity 不在 BackStack 中,因此不会清除活动。

android:noHistory="true"为 LoginActivity添加AndroidManifest.xml并尝试。在看到您更新的问题后,我将提供此更新。

于 2013-01-05T07:30:57.460 回答
0

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();

        }
    });
于 2013-01-05T07:52:24.807 回答
-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();

            }
        });
于 2013-01-05T08:16:09.940 回答