Android-如何检测堆栈中的最终活动
我使用下面的代码检查Android-如何检测堆栈中的最终活动,android,android-activity,android-lifecycle,back-stack,android-task,Android,Android Activity,Android Lifecycle,Back Stack,Android Task,我使用下面的代码检查活动中的最后片段,弹出一个对话框 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // Check if there is only one fragment if (keyCode == KeyEvent.KEYCODE_BACK) { if (getSupportFragmentManager().getBackStackEn
活动中的最后片段
,弹出一个对话框
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Check if there is only one fragment
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
DlgUniversalError.shallIQuit(this, getApplicationContext()
.getResources().getString(R.string.doYouWantToQuit),
getSupportFragmentManager());
return false;
}
}
return super.onKeyDown(keyCode, event);
}
现在假设我有一组活动
s。如何对活动执行相同的操作
该活动是否是堆栈中的最后一个,并弹出退出对话框?假设您有活动1、2、3。。。它们的流程是:
Activity 1 -> Activity 2 -> Activity 3 -> ... and so on
您真正拥有的唯一选择是在活动1
中,重写onBackPressed()
方法,如下所示:
@Override
public void onBackPressed(){
/* Call the Quit Dialog here. If user presses YES,
* call super.onBackPressed(), else if user presses NO,
* do nothing. */
}
片段
backstack对于应用程序是本地的,而活动
backstack对于应用程序是本地的。现在有两种方法可以检查当前任务的活动的状态
backbackback:
ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);
if(taskList.get(0).numActivities == 1 && taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())) {
/* do whatever you want e.g. super.onBackPressed() etc. */
}
1.说你的活动
流程是
A1 -> A2 -> A3 -> A1 -> A2 -> A3 -> A1 ...
可以确保活动1
总是以空的backbackback开始。每次启动活动1
时,请使用以下标志调用它:
2.有一个名为的方法,可以让您知道活动
是否是该任务中的第一个活动
,即该任务的后台的最后一个活动
。这看起来很有希望
3.还有一种方法可以确定活动是否是backbackback上的最后一个活动:
ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);
if(taskList.get(0).numActivities == 1 && taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())) {
/* do whatever you want e.g. super.onBackPressed() etc. */
}
ActivityManager mngr=(ActivityManager)getSystemService(ACTIVITY_服务);
List taskList=mngr.getRunningTasks(10);
if(taskList.get(0).numActivities==1&&taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())){
/*做任何你想做的事,例如super.onBackPressed()等*/
}
为此,向清单中添加android.permission.GET_TASKS
权限
就这样……:) 是的。。。没错。。。。怎么样:Activity 1->Activity 2->Activity 3->Activity 1->Activity 3
我使用了不同的导航设计,正如你在第一条评论中建议的那样。。。。与我的问题相比,这是一个很好的用户模式。。。。。谢谢你的信息getRunningTasks
现在不推荐使用。我不确定我是否理解这个问题,但它让我想到了以下几点: