我已经阅读了几篇关于使用它的帖子,但必须遗漏一些因为它不适合我.我的活动A在清单中有launchmode ="singleTop".它启动活动B,启动模式="singleInstance".活动B打开浏览器并接收和意图返回,这就是为什么它是singleInstance.我试图覆盖后退按钮,以便用户被发送回活动A,然后可以按Back返回活动,而不是再次返回活动B.
// activity B
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) onBackPressed();
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
startActivity(new Intent(this, UI.class)
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK));
return;
}
Run Code Online (Sandbox Code Playgroud)
从浏览器返回后,堆栈是...... A,B,浏览器,B
我希望这段代码能够将堆栈更改为...... A ...以便再次按下后再将用户带回主屏幕.
相反,它似乎将堆栈更改为... A,B,浏览器,B,A ......好像那些标志不在那里.
我尝试在startActivity之后调用活动B中的finish(),但后面的按钮再次将我带回浏览器!
我错过了什么?谢谢!
java android android-manifest android-intent android-activity
我正在编写一个android的聊天程序.
我将联系人列表作为一个活动,将聊天窗口作为第二个活动.我使用startActivity切换到聊天活动,但每次都会重新加载聊天活动.因此屏幕被清除.
有没有办法切换到正在运行的活动而不必重新启动它?
private Intent myIntent = null;
Run Code Online (Sandbox Code Playgroud)
...
if (myIntent == null)
myIntent = new Intent(HanasuAndroidActivity.activity, ChatWindow.class);
this.startActivity(myIntent);
Run Code Online (Sandbox Code Playgroud) 我创建了一个具有多个页面的应用程序,从一个到另一个的导航代表了一个关键的流程.我不希望用户能够在没有先警告他的情况下按下后退按钮并转义活动,然后最终删除所有堆栈跟踪,以便当活动再次启动时它重新开始.
到目前为止,我一直在使用类似于以下功能的东西:
@Override
public void onBackPressed()
{
this.finish();
Intent int1= new Intent(this, Home.class);
int1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(int1);
super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)
但有时当我再次启动应用程序退出应用程序后,它会从某个随机页面或我退出应用程序的那个页面重新启动(基本上不是从预期开始的主屏幕)
除了清除代码中描述的所有先前活动标志之外,我想不出更简洁的退出应用程序的方法.任何有关上述的帮助表示赞赏!
编辑:
如果用户按下后退按钮,在我的活动流程中的任何时候,我都希望将控件返回到主页面(清除所有先前的活动堆栈跟踪).这样,如果有人重新登录应用程序,它将从主页面重新开始.