2011-06-27 12 views
7

Mi aplicación se compone de algunas actividades.Definir actividad predeterminada (cuando se inicia la aplicación) programáticamente

La actividad A es mi menú principal con algunos iconos. Esta actividad puede iniciarse dependiendo del icono que presione: Actividad B, C, D, E o F.

Eso está bien y muy fácil, la Actividad A es la predeterminada.

Ahora, hice una opción de preferencia que permite a los usuarios comenzar su actividad favorita.

Algunos usuarios prefieren, de hecho, obtener directamente la Actividad B, por ejemplo.

La única manera que encontré una solución era hacer esto en Actividad A esta solución es muy feo porque Actividad A siempre se iniciará y cerrará automáticamente:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    settings = PreferenceManager 
      .getDefaultSharedPreferences(getBaseContext()); 
    final Intent intent = getIntent(); 
    String action = intent.getAction(); 

    if (Intent.ACTION_MAIN.equals(action)) { 
     switch (Integer.valueOf(settings.getString("Activitypref", "1"))) { 
     case 2: 
      Intent i = new Intent(ActivityA.this, ActivityB.class); 
      finish(); 
      startActivity(i); 
      break; 
     case 3: 
      i = new Intent(ActivityA.this, ActivityC.class); 
      finish(); 
      startActivity(i); 
      break; 
     case 4: 
      i = new Intent(ActivityA.this, ActivityD.class); 
      finish(); 
      startActivity(i); 
      break; 
     case 5: 
      i = new Intent(ActivityA.this, ActivityE.class); 
      finish(); 
      startActivity(i); 
      break; 
     case 6: 
      i = new Intent(ActivityA.this, ActivityF.class); 
      finish(); 
      startActivity(i); 
      break; 
     default: 
      break; 
     } 
    } 
+1

Si el único propósito de la Actividad A es decidir qué otra actividad lanzar, entonces no veo esto como una solución desagradable. Parece que la Actividad A está haciendo su trabajo. – DeeV

+0

Sí, pero el usuario puede elegir "omitir" esta actividad y pasar directamente a la Actividad X. Cuando se establece en preferencias, no quiero que se inicie la Actividad A, excepto cuando el usuario presiona el botón Inicio después de haber disfrutado de la Actividad X. –

+0

Lo más molesto es el tiempo de carga y la pantalla parpadeando cuando se inicia la Actividad A y se cierra en "onCreate" –

Respuesta

8

En lugar de ActivityA, considere el uso de la actividad de envoltura para ser llamado desde el lanzador. Eliminará la necesidad de buscar ACTION_MAIN. También puede almacenar objetivo nombre de la actividad en las preferencias y utilizarlo para iniciar directamente la actividad de su destino a través de diferentes firmas intención:

public Intent (String action) 

<activity class=".StartActivity" android:label="..."> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
</activity> 

<activity class=".ActivityA" android:label="..."> 
      <intent-filter> 
       <action android:name="mypackage.ActivityA" />      
      </intent-filter> 
</activity> 

Y en startActivity

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    settings = PreferenceManager 
      .getDefaultSharedPreferences(getBaseContext()); 

    String action = settings.getString("Activitypref","mypackage.ActivityA"); 
    Intent intent = new Intent(action); 
    startActivity(intent); 
    .... 
} 

Es posible que necesite toquetear un poco para hacerlo bien.

+0

Hola ALex, tu solución parece exactamente lo que estoy buscando, pero desafortunadamente, no entiendo lo que quieres decir ... Me siento un poco estúpido, pero ¿un pequeño fragmento o ejemplo? –

+0

Agregué una actualización. No tengo acceso a mi código de Android en este momento, por lo que es posible que tengas que jugar con él para hacerlo bien. –

+1

La respuesta es genial, pero su escritora es como mi ACtivity A anterior y hace que la pantalla parpadee un poco (StartActivity se inicia entonces ACtivityA) luego, también necesito terminarla, es lo mismo que antes, de hecho .. –

Cuestiones relacionadas