2011-05-01 14 views
6

derecho Tengo un botón de inicio de sesión ubicado exactamente en el mismo lugar en cada actividad y tengo alrededor de 20 actividades en este momento pero aumentará mucho más pronto, y realmente no quiero estar copiar y pegar el mismo código en cada actividad, por lo que estoy buscando una solución simple y eficiente para manejar el evento onClick, que funcionará globalmente en toda la aplicación.Mismo botón en múltiples actividades

Por ejemplo, si el Usuario A hace clic en el botón de inicio de sesión en la Actividad 1 e inicia sesión, mostrará que ha iniciado sesión en la Actividad 2 y 3 y así sucesivamente ... hasta que se cierre la sesión.

El signo de botón tiene el mismo ID en toda la aplicación que es "@ +/Identificación del SignIn"

¿Sería más fácil llamar a una función única en el comienzo de cada actividad? Pensé que no sería un uso efectivo del poder de procesamiento, etc.?

Cualquier sugerencia y/o guía sería muy apreciada. Gracias :)

+1

Simplemente por curiosidad, ¿por qué su aplicación necesita 20 actividades con exactamente el mismo botón? –

+0

Porque hay una barra de título en la parte superior de cada actividad que tiene el logotipo y el nombre de los usuarios, etc. –

+0

¿Hay alguna razón por la que no puede usar la misma Actividad y reemplazar la barra de título (o reemplazar el logotipo y nombre de usuario) para cada uno onCreate()? –

Respuesta

8

No se puede evitar la aplicación de ese oyente en todas sus actividades, ya sea en formas. Pero usted puede hacerlo en un poco de manera más organizada:

Se podría escribir un diseño de cabecera personalizada para su aplicación (/res/layout/header.xml), en el que tienes el botón "Iniciar sesión" con un conjunto detector de clics (señalando a un onSignInClicked método):

android:onClick="onSignInClicked" 

a continuación, se incluye este encabezado para cada diseño de la actividad:

<include android:id="@+id/header" layout="@layout/header" /> 

también podría crear una interfaz que contiene una declaración onSignInClicked método, y por toda su activiti Al implementar esa interfaz, los fuerza a definir el cuerpo del método onSignInClicked.

Lo que realmente hace que también se puede envolver en

  • un método estático dentro de una clase a nivel mundial accesible, o
  • un método bien parametrizada en el interior de su clase Application extensión.

por lo que en todas sus actividades de este método puede ser:

public static void onSignInClicked(View view) 
{ 
    // static method with call with reference to the current activity 
    SignInHelper.doSignIn(this); 
} 

o

public static void onSignInClicked(View view) 
{ 
    // global method in your `Application` extension 
    // with reference to the current activity 
    ((MyApplication)getApplicationContext()).doSignIn(this); 
} 

Si elige la segunda manera, no se olvide de actualizar su androidManifes.xml estableciendo la name atributo de su application etiqueta:

<application android:name=".MyApplication" [...] 
+0

de nada, me alegro de que pudieras hacerlo. :) – rekaszeru

Cuestiones relacionadas