2014-10-13 4 views
1

Когда нажмет клавишу назад на своем устройстве я хочу, чтобы перейти к предыдущему Activity но не возвращаться к Home.Android onBackPressed избежать выхода

Например, если пользователь открыл некоторые Activities, задняя стек должен быть:

  • Activity_A
  • Activity_B
  • Activity_C [в настоящее время] отображается

Когда пользователь нажимает Back button, он должен получить:

  • Activity_A
  • Activity_B [В настоящее время] отображается

И, если он нажимает на кнопку еще раз:

  • Активность_A [В настоящее время отображается]

Затем я хочу отключить эту кнопку, чтобы избежать возврата к Home screen.

Возможно ли это?

До сих пор я использую этот метод, но я читал, что это не будет поддерживаться на Android L:

protected int getActivitiesStackSize() 
{ 
    ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> taskList = am.getRunningTasks(1); 
    return taskList.get(0).numActivities; 
} 

@Override 
public void onBackPressed() 
{ 
    // Pop activity 
    if (getActivitiesStackSize() != 1) super.onBackPressed(); 
} 

Activity_A может быть любой Activity в моем проекте.

+2

Попытка переопределить OnBackPressed в Activity_A и сделать его пустым – Slampy

+0

Activity_A может быть любым 'Activity' в моем проекте. Извините, я забыл это сказать. – Manitoba

+0

Имейте в виду, что вы можете оттолкнуть пользователей, если вы просто отключите кнопку «Назад». По крайней мере, предоставить тост или функцию «двойного касания для выхода», как описано в другом месте. – 323go

ответ

0

вы можете переопределить событие кнопки «Назад», а затем перемещаться между действиями, за исключением операции «А», когда кнопка «Назад» все равно должна выйти. Пример

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // Check if the key event was the Back button 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { 

     //Move to previous activity 

     return true; 
    } 

    // If it wasn't the Back key, bubble up to the default 
    // system behavior 
    return super.onKeyDown(keyCode, event); 
} 
+0

Activity_A может быть любой «Активность» в моем проекте. Извините, я забыл это сказать. – Manitoba

+0

Итак, приложение может начинаться с любого действия и двигаться вперед к другим действиям, и вы хотите выйти, как только начальная активность будет достигнута, если нажата кнопка «Назад»? – JacoT

+0

Да, точно! Вы недооценили мою проблему. В принципе, все предыдущие действия были «закончены». – Manitoba

-1

Использование android: noHistory = "true" в манифесте для активности, с которой вы не хотите переходить. Никакая история не позволяет активности сохранять в стеке. При нажатии в приложении Activity_B приложение будет закрыто. Если это то, что вы хотите, вы можете использовать эту функцию.

+0

Activity_A может быть любой «Деятельностью» в моем проекте. Извините, я забыл это сказать. – Manitoba

0

попробовать это:

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    //Handle the back button 
    if(keyCode == KeyEvent.KEYCODE_BACK && isTaskRoot()) { 
     //Ask the user if they want to quit 
     new AlertDialog.Builder(this) 
     .setIcon(android.R.drawable.ic_dialog_alert) 
     .setTitle(R.string.quit) 
     .setMessage(R.string.really_quit) 
     .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       //Stop the activity 
       finish();  
      } 
     }) 
     .setNegativeButton(R.string.no, null) 
     .show(); 

     return true; 
    } 
    else { 
     return super.onKeyDown(keyCode, event); 
    } 
} 
+0

Привет. Спасибо за Ваш ответ. 'isTaskRoot', вероятно, будет работать, но это не совсем то, что я ищу. Есть ли способ вручную получить счетчик размера стека действий, даже когда «Активность» будет убита (не получив вызов 'onDestroy')? – Manitoba

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

  • Нет связанных вопросов^_^