2011-06-27 15 views
5

En mi aplicación, quiero controlar el hardware back button. Eso significa que en mi aplicación hay cuatro o cinco actividades. Ahora supongamos que paso de una actividad a otra.Cómo controlar el botón de retroceso de hardware

Ahora en mi caso cuando presiono el botón de retroceso de hardware Quiero que mi aplicación salga de cualquier actividad en la que he estado pero en mi aplicación cuando presiona este botón que no sale de mi aplicación hasta que alcanza el primera actividad ... entonces mi pregunta es qué debo hacer para que cuando presione el botón de retroceso de hardware salga de mi aplicación ... por favor sugiérame.

+2

Ow, y creo que escribiendo "atrás" y "androide" aquí en stackoverflow le dará una gran cantidad de éxitos similares .... – Nanne

+0

Caramba, ¿cómo se consigue este tipo de respuestas a su pregunta y ni siquiera acepta una respuesta? – IcedDante

Respuesta

15

Prueba esto:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if(keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_HOME); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
     return true; 
    } 
return false; 
} 
+0

pero donde escribo este código significa que hay cinco actividades en mi aplicación así que en qué actividad escribo este código ... más, en cuyo caso se ejecuta este código – AndroidDev

+1

@Anshuman, esto es lo que quiere aquí mismo. Deberá verificarlo en cualquier actividad visible, y se ejecutará dentro de esa actividad. Entonces, si usa esto, comenzará la nueva actividad. –

4

que tendrá que almacenar los casos de los 5 Actividades en una clase común, y añadir un onBackPressed() en cada actividad, lo que llamar a un método en la clase común que se llame activity.finish() en cada una de las 5 actividades.

Por ejemplo:

class Activity1 extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     MyController.getInstance().setActivity1(this); 
    } 

    public void onBackPressed() { 
     MyController.getInstance().closeAllActivities(); 
     super.onBackPressed(); 
    } 
} 

Del mismo modo, escribir para Actividad2, Activity3, y así sucesivamente. Y, clase myController se vería así:

class MyController { 
    private static MyController instance; 
    private Activity activity1, activity2, activity3, activity4, activity5; 

    private MyController() {} 
    public static synchronized MyController getInstance() { 
     if(instance == null) { 
      instance = new MyController; 
     } 

     return instance; 
    } 

    public void setActivity1(Activity activityObject) { activity1 = activityObject; } 
    public void setActivity2(Activity activityObject) { activity2 = activityObject; } 
    public void setActivity3(Activity activityObject) { activity3 = activityObject; } 
    public void setActivity4(Activity activityObject) { activity4 = activityObject; } 
    public void setActivity5(Activity activityObject) { activity5 = activityObject; } 

    public void closeAllActivities() { 
     if(activity1 != null) { 
      activity1.finish(); 
     } 
     if(activity2 != null) { 
      activity2.finish(); 
     } 
     if(activity3 != null) { 
      activity3.finish(); 
     } 
     if(activity4 != null) { 
      activity4.finish(); 
     } 
     if(activity5 != null) { 
      activity5.finish(); 
     } 
    } 
} 
+0

¿Puedes mostrarme ejemplos ... soy nuevo en Android ... y no sé cómo incluir todas las 5 actividades en una clase común – AndroidDev

+0

Voy a actualizar mi respuesta con esto. – sparkymat

+0

OK SparkYmat..i funcionará en eso ... gracias por su sugerencia .. – AndroidDev

Cuestiones relacionadas