我正在尝试清除活动历史堆栈,当用户点击注销按钮时甚至尝试使用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();
}
});
问题是,当我点击退出时,它进入登录活动,当我点击后退按钮时,它进入第二个活动.
为什么它没有完成活动,也为什么它进入第二个活动,如果它维护堆栈然后它应该进入第一个活动而不是第二个当我从登录屏幕点击回来,不知道我错过了什么样的事情.
更新
如果我从登录屏幕调用意图时删除finish(),一切都工作正常,但我不想保持在堆栈登录屏幕.
你的建议很有意义.
解决方法:
你可以为这个问题做一个技巧.我用过它并且和我一起工作.
在ThreeActivity 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();
}
});
希望它能解决你的问题.
标签:android,android-activity
来源: https://codeday.me/bug/20190529/1180129.html