play origenes modo instalar habilitar google desconocidos descargar desarrollador como chrome apps activar activa android

android - origenes - habilitar google play store en tu chromebook



Android vuelve a la primera actividad con un clic en el botón (6)

Estoy escribiendo una aplicación en la que estoy tratando con 4 actividades, digamos A, B, C y D. La actividad A invoca B, B invoca C, C invoca D. En cada una de las actividades, tengo un botón llamado "Inicio" botón. Cuando el usuario hace clic en el botón de inicio en cualquiera de las actividades B, C, D, la aplicación debería volver a la pantalla de actividad A?

¿Cómo simular el botón "inicio" en este caso?


El único problema que veo usando android:launchMode="singleTask" es cuando minimizas la aplicación y la android:launchMode="singleTask" presionando el ícono de la aplicación nuevamente, luego la aplicación comienza de cero y no adquiere su estado. así que he optado por usar

intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );

que mantendrá solo una instancia y despejará todas las actividades además de eso.

Intent intent = new Intent( context, MyActivity.class ); intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP ); current_activity.startActivity( intent );


En primer lugar, no puedo creer que Android no tenga un equivalente fácil de iOS poptorootviewcontroller.

El problema con el uso de una intención y una actividad de inicio es que, por lo que sé, volverá a crear la actividad raíz, lo cual es un problema si, por ejemplo, utiliza una solicitud de red asíncrona para cargar datos y diseñar la interfaz. Esto puede tener efectos visuales desagradables.

Aquí hay una solución creativa que he usado en el proyecto de mi carpeta de amigos:

Cree un booleano global: public boolean myBool = true; Haga esto en la clase MyApplication y registre la clase en el manifiesto:

<application android:name=".MyApplication"

La actividad A es la raíz, haz esto en onResume:

if(((MyApplication) this.getApplication()).myBool == false) { if(isTaskRoot()) { ((MyApplication) this.getApplication()).myBool = true; } else { finish(); } }

En cada actividad que irá encima de la Actividad A ponga este código en:

@Override public void onResume() { super.onResume(); if(((MyApplication) this.getApplication()).myBool == false) { finish(); } } @Override public boolean onSupportNavigateUp(){ ((MyApplication) this.getApplication()).myBool = false; finish(); return true; }

Incluso puede poner esto en la actividad A también si está apilando otras instancias de A encima de la raíz A. onSupportNavigateUp es para el botón arriba. Sustituya este método por otro si usa su propio botón.

Ahora, cuando tiene algunas actividades apiladas encima de A y presiona el botón arriba, la actividad superior terminará y el sistema llamará a onresume en la actividad que se encuentra abajo en la pila y finalizará. Esto funcionará en una cadena todo el camino de regreso a la raíz A.


Esto funciona para mi

Intent intent = new Intent(D.this, A.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);

En el manifiesto:

android:name=".A" android:launchMode="singleTask"


Estoy usando https://github.com/greenrobot/EventBus esto. En la actividad raíz debes suscribirte al evento.

EventBus.getDefault (). Register (this);

Luego debes definir la devolución de llamada del evento.

public void onEvent(LogoutEvent event) { // your implementation logout(); }

y el oyente del botón de cierre de sesión debe tener un código como este:

finish(); // you must finish previous activity EventBus.getDefault().post(new LogoutEvent());

Eso es todo


Kotlin

fun Context.popToRoot() { val intent = Intent(this, MainActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP startActivity(intent) }

Cambia la actividad principal a tu actividad principal.

En cualquier actividad solo llame:

this.popToRoot()


button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startActivity(new Intent(D.this, A.class)); } });

Declare A en su manifiesto con el android:launchMode="singleTask" . De esta manera, cuando llame a startActivity() desde sus otras actividades, y A ya se está ejecutando, solo lo pondrá al frente. De lo contrario lanzará una nueva instancia.