2

Я использую ниже код, чтобы проверить окончательную Fragment в Activity совать диалоговоеAndroid - Как определить конечную активность в стеке

@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 последним в стеке и появляется диалог закрытия?

+0

Я не уверен, что понял вопрос, но это заставляет меня думать об этом: [Деятельность # isTaskRoot()] (http://developer.android.com/ ссылка/android/app/Activity.html # isTaskRoot% 28% 29) –

ответ

6

Скажем, у вас есть упражнения 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 является локальным для task. В настоящее время существует несколько способов, чтобы проверить статус Activity backstack текущей задачи по:

1. Произнесите Activity поток

A1 -> A2 -> A3 -> A1 -> A2 -> A3 -> A1 ... 

Можно гарантировать, что Activity 1 всегда начинается с пустой backstack. Каждый раз, когда вы начинаете 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(), который позволяет узнать, если Activity в этой задаче первый Activity, т.е. последний Activity на задней стороне этой задачи. Это выглядит многообещающе.

3. Оказывается, есть еще один способ, чтобы определить, является ли Activity последнего один на backstack:

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 разрешения на ваш манифест.

Так что ... :)

+0

Да ... thats correct .... Как насчет: 'Activity 1 -> Activity 2 -> Activity 3 -> Activity 1-> Activity 3' – Devrath

+0

@Devrath: см. Отредактированный ответ –

+0

Я использовал другой дизайн навигации, как и предложил в вашем первом комментарии .... это хороший шаблон пользователя по сравнению с моим вопросом ..... Спасибо за информацию! – Devrath

Смежные вопросы