Dev*_*ath 2 android android-lifecycle android-activity back-stack android-task
我使用下面的代码检查最后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);
}
Run Code Online (Sandbox Code Playgroud)
现在假设我有一套Activitys.如何Activity判断Activity堆栈中是否为最后一个,并弹出退出对话框?
假设你有活动1,2,3 ...他们的流程是:
Activity 1 -> Activity 2 -> Activity 3 -> ... and so on
Run Code Online (Sandbox Code Playgroud)
您真正拥有的唯一选择是,在您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. */
}
Run Code Online (Sandbox Code Playgroud)
在Fragment堆栈中是本地的应用程序,而Activity返回堆栈是本地的一个任务.现在有几种方法可以检查当前任务的Activitybackstack 的状态:
1.说你的Activity流程是
A1 -> A2 -> A3 -> A1 -> A2 -> A3 -> A1 ...
Run Code Online (Sandbox Code Playgroud)
可以确保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);
Run Code Online (Sandbox Code Playgroud)
2.有一个名为isTaskRoot()的方法可以让你知道a是否Activity是该Activity任务中的第一个,即该Activity任务的backstack上的最后一个.这很有希望.
3.原来还有一种方法可以确定是否Activity是最后一个背斜堆:
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. */
}
Run Code Online (Sandbox Code Playgroud)
为此,android.permission.GET_TASKS请为清单添加权限.
那么...... :)
| 归档时间: |
|
| 查看次数: |
3467 次 |
| 最近记录: |