我使用下面的代码来检查最后Fragment
的Activity
弹出对话框
@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);
}
现在假设我有一组Activity
。我怎么能执行相同的一个Activity
是否Activity
是最后的堆栈,并弹出一个对话框退出?
假设您有活动1,2,3 ...,其流程为:
Activity 1 -> Activity 2 -> Activity 3 -> ... and so on
您真正拥有的唯一选择是在中Activity 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. */
}
在Fragment
堆栈中是本地的应用程序,而Activity
返回堆栈是本地的一个任务。现在,有两种方法可以检查当前任务的Activity
后台堆栈状态:
1.说你的Activity
流程是
A1 -> A2 -> A3 -> A1 -> A2 -> A3 -> A1 ...
可以确保Activity 1
始终以空的堆栈开始。每次您以开头Activity 1
时startActivity()
,请使用以下FLAG_ACTIVITY_CLEAR_TOP
标志进行调用:
Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
2.有一个名为isTaskRoot()的方法,可以让您知道anActivity
是否是该Activity
任务中的第一个,即该Activity
任务的后堆栈中的最后一个。这看起来很有希望。
3.事实证明,还有另一种方法可以确定anActivity
是否为后堆栈中的最后一个:
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. */
}
为此,请android.permission.GET_TASKS
向清单添加权限。
所以那里... :)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句