我正在尝试清除活动历史堆栈,当用户点击 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 回答
你可以为这个问题做一个技巧 . 我用过它并且和我一起工作 .
写下面的代码行 inside your ThirdActivity onclick .
在 OnCreate of FirstActivity Class: 内写下代码之后
Also put Extra value of GO as true while calling FirstActivity from MainActivity as Below
希望它能解决你的问题 .
将意图平面
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"
并尝试 . 我在看到您更新的问题后给出了此更新 .Third screen
最后我得到了一个解决方案,无论如何!它实现了我的目标,在自己的活动中创建活动的静态对象,并且对于所有活动注销
object.finish()
,它工作正常 .以下是实现目标的诀窍
在第一个活动中声明
public static FirstActivity first;
并在onCreate
内同意first=this;
我也为其他活动做了同样的事情,当退出时,确实如下所示 .