2012-08-04 11 views
6

Sé que esta pregunta se ha realizado muchas veces, pero ninguna de las soluciones funciona y mi situación es un poco diferente.Ir a la pantalla de inicio en lugar de la actividad anterior

Tengo un Activity que se puede llamar desde diferentes actividades. Pero quiero que cuando el usuario presiona el botón Atrás, en lugar de la actividad anterior, la aplicación debe ir a la pantalla de inicio.

Una forma de usar StartActivityFromResult() pero tendré que usarla en cada actividad de llamada.

+0

u puede mantener el botón cuando el botón presiona pasa automáticamente a la página HME ... Intención i = new Intent (AccountActivity.this, ContactsActivity.class); startActivity (i); – shassss

+1

"Pero quiero que cuando el usuario presiona el botón Atrás, en lugar de la actividad anterior, la aplicación debe ir a la pantalla de inicio", ya que es poco probable que el * usuario * quiera esto, ¿por qué crees que esto es un comportamiento justificable? – CommonsWare

+0

la actividad que menciono es la pantalla del jugador de un reproductor de música. Quiero que cuando el usuario seleccione una canción de la lista de reproducción, la aplicación vaya a PlayerActivty. Pero cuando el botón Atrás está presionado desde el reproductor, el flujo irá a la pantalla de inicio o a alguna otra aplicación que el usuario haya abierto antes.Espero haber explicado la pregunta. – reiley

Respuesta

23

puede anular onBackPressed método de la siguiente manera. Deberia de funcionar.

public void onBackPressed() { 
    Intent startMain = new Intent(Intent.ACTION_MAIN); 
     startMain.addCategory(Intent.CATEGORY_HOME); 
     startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(startMain); 

} 
+0

Gracias ... funcionó ... pero ¿qué pasa si p. Ej. Estaba usando la aplicación de mensajes antes de mi aplicación y registré la tecla de inicio presionada y luego abrí mi aplicación. Ahora, si presiono la tecla Atrás, ¿cómo puedo volver a la aplicación abierta anteriormente (mensajes en este ejemplo, por ejemplo)? – reiley

+0

Si conoce el nombre de la actividad y el paquete de esa aplicación de correo, puede llamar a esa actividad desde su método onBackpressed. – android

+0

Lo he visto en otros lugares que esto no es recomendable. – Enigma

0

Simplemente envíe un Intent directamente a casa. Esto se puede hacer mediante la configuración de la acción y la categoría de ese intento.

Consulte la documentación en Intent para más detalles.

-3
 Button btn = (Button) findViewById(R.id.button2); 
     btn.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) 
       { 
      Intent i = new Intent(AccountActivity.this, HomeActivity.class); 
        startActivity(i); 
       } 
      }); 
+0

Esto es incorrecto. No hay clases de HomeActivity a las que pueda llamar. Consulte mi publicación o la publicación de @android. – JoxTraex

2

También puede simplemente llamar al método finish() sobre la actividad.

+0

No recomendaré usar este enfoque porque 1. Es de suponer que el sistema de operación invocará la devolución de llamada 'onDestroy' de la actividad que dañará el orden lógico de la pila de respaldo. 2. Si su actividad es llamada por otra actividad usando el método 'startActivityForResult', llamará a la actividad de llamada' onActivityResult' callback. – Eido95

1

Y añadiendo a esta pregunta si no desea respaldar su actividad donde presionó el botón Atrás, entonces solo un finish() debajo del código.

public void onBackPressed() { 
    Intent mainActivity = new Intent(Intent.ACTION_MAIN); 
    mainActivity.addCategory(Intent.CATEGORY_HOME); 
    mainActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(mainActivity); 
    finish(); 
} 
0

Es sólo simple si usted tiene una Actividad A y haces 3 fragmentos como B, C y Home_Fragment. Ahora, si está en el fragmento B o C y presiona el botón Atrás, quiere avanzar Home_Fragment todo el tiempo.
Entonces usted tiene que acaba de reemplazar el método onBackPressed() en la Actividad A y también cuando se salta a cualquier fragmento, a continuación, dar un TAG o nombre específica, se le reconocen ese fragmento de la Actividad A.

estoy dando la ejemplo, que puede comprender fácilmente:

Pasar de la actividad de la a a la C Fragmento

if (savedInstanceState == null) { 
    getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new C_fragment(),"xyz").commit(); 
} 

o si se desplaza de un fragmento B al fragmento C, y en la prensa de vuelta, quiere venir en Fragmento D, hacer, como a continuación:

btn.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View view) { 
     getActivity().getSupportFragmentManager().beginTransaction() 
        .add(R.id.container, new C_frament(), "xyz").commit(); 
     ((ActionBarActivity) getActivity()).getSupportActionBar().setTitle("Fragment C"); 
    } 
}); 

Ahora usted tiene que apenas anular el onBackPressed() método en el la actividad principal de la siguiente manera:

@Override 
public void onBackPressed() { 
    FragmentManager fragmentManager =getSupportFragmentManager(); 

    if (((C_fragment) getSupportFragmentManager().findFragmentByTag("xyz")) != null 
      && ((C_fragment) getSupportFragmentManager().findFragmentByTag("xyz")).isVisible()) { 

     Fragment fragment = new Home_Fragment(); 
     fragmentManager.beginTransaction() 
       .replace(R.id.container, fragment) 
       .commit(); 
     getSupportActionBar().setTitle("Home fragment "); 

    } else { 
     super.onBackPressed(); 
    } 
} 
Cuestiones relacionadas