2011-06-22 18 views
9

Ok Estoy diseñando una aplicación que tiene un diseño muy simple de 62 pantallas de contenido, a las que se accede a través de 27 pantallas de menú. En total, son 89 actividades.En Android, ¿cada pantalla debe ser su propia Actividad o diseño?

Por el momento, tengo cada pantalla de contenido para que sea una actividad que solo llama a un diseño XML (texto, botones e imagen) y agrega algunas funciones de onClick.

Cada pantalla de menú es una actividad de lista y presionar cada elemento en la lista abre la actividad de ese elemento (ya sea otra pantalla de menú o una pantalla de contenido).

Por el momento lo estoy probando con 3 pantallas de menú y una pantalla de contenido. Está bien desplazarse por todos ellos, sin embargo, me preocupa que cuando termine la aplicación tenga demasiadas actividades y la aplicación se vuelva lenta y adormecida. En un uso promedio de la aplicación, imagino que el usuario usaría no más de 10 actividades, pero no estoy seguro de si Android anticiparía la creación de otras actividades no utilizadas o qué.

Así que otra forma de implementar esto sería tener solo unas pocas actividades (tal vez 1 para un MainMenu, 1 para un subMenú y 1 para un ContentScreen) que simplemente determinan qué diseño mostrar. Sin embargo, creo que esto significa que cada actividad tiene mucho trabajo por hacer y también pierdo la funcionalidad de presionar el botón Atrás haciendo que el usuario realice una copia de seguridad a través de la jerarquía del menú (y codificar un botón Atrás de reemplazo en cada pantalla involucrar un Caso masivo para el onClick que involucre cada diseño posible, ¡los 89 de ellos!).

¿Cuál sería la mejor manera de realizar esta aplicación?

cualquier ayuda se agradece mucho

+1

¿Qué hace su aplicación? Eso es una gran cantidad de pantallas de contenido. – Matt

+0

Es una aplicación de guía turística, así que tenga una página de contenido para hoteles, restaurantes, atracciones, etc. ... – Stu

Respuesta

2

A menos que los diseños y los comportamientos difieran significativamente entre las actividades del menú y las actividades de contenido, elegiré "solo unas pocas actividades".

El botón Atrás no se romperá, Android realiza un seguimiento de su retraso acumulado.

¿Realmente necesita 89 diseños diferentes? Si se trata principalmente de contenido que es diferente entre ellos, almacene el contenido en una base de datos o archivo o en /res/, reutilice los diseños y complete las áreas de contenido de diseño en tiempo de ejecución.


actualizaciones:

¿No sería más fácil tener actividad por 1 página de contenido que en onCreate() rellena el diseño con el contenido apropiado?

Depende de cuán diferente va a ser el código onCreate(). Si su onCreate() va a ser un gigante switch con 62 cláusulas enormemente diferentes case, entonces probablemente sea mejor ir con actividades pequeñas separadas, no una enorme. Si puede generalizar el código onCreate(), y mantenerlo por debajo, digamos, 100 líneas y 10 declaraciones de bifurcación, eso sería mucho más.

Para dar un ejemplo, hace algún tiempo estaba construyendo una aplicación simple que tiene una colección de preguntas de examen y las presenta al azar al usuario. Cada pregunta tiene texto de preguntas, ilustración y 2-4 opciones de respuestas. Hubo alrededor de 500 preguntas diferentes. Aquí está el código que carga una pregunta de la base de datos y actualiza el diseño. Tenga en cuenta que maneja un número variable de respuestas y la posibilidad de que algunas preguntas no tengan una ilustración.

public void loadQuestion(int id) { 
    // Columns in questions table: 
    // CREATE TABLE questions (
    //   id integer, 
    //   q text, 
    //   a1 text, 
    //   a2 text, 
    //   a3 text, 
    //   a4 text, 
    //   a5 text, 
    //   correct integer, 
    //   img blob 
    // ); 

    Cursor c = mDatabase.rawQuery("SELECT * FROM questions where id=" + id, null); 
    c.moveToFirst(); 

    TextView text = (TextView) findViewById(R.id.text); 
    text.setText(c.getString(1)); 

    RadioGroup g = (RadioGroup) findViewById(R.id.answers); 
    g.clearCheck(); 

    // Load answers! 
    int correct = c.getInt(7); 
    int[] buttons = new int[] {R.id.a1, R.id.a2, R.id.a3, R.id.a4, R.id.a5}; 
    for (int i=0; i < 5; i++) { 
     String answerText = c.getString(i + 2); 
     RadioButton rb = (RadioButton) findViewById(buttons[i]); 
     if (answerText != null && answerText.length() > 0) { 
      rb.setText(answerText); 
      rb.setTag(i + 1 == correct ? "correct" : null); 
      rb.setVisibility(RadioButton.VISIBLE); 
     } else { 
      rb.setVisibility(RadioButton.GONE); 
     } 
    } 

    byte[] encoded = c.getBlob(8); 
    ImageView iv = (ImageView) findViewById(R.id.image); 
    if (encoded != null && encoded.length > 0) { 
     iv.setVisibility(ImageView.VISIBLE); 
     iv.setImageBitmap(bytesToBitmap(encoded)); 
    } else { 
     iv.setVisibility(ImageView.GONE); 
    } 
} 

¿Qué quiere decir por: botón Atrás no se rompa, Android hace un seguimiento de su cartera?

A medida que el usuario se mueve de la actividad a actividad, a través de las aplicaciones, el sistema Android mantiene una historia lineal de navegación de las actividades que el usuario ha visitado . Esta es la pila de actividad , también conocida como pila posterior. En general, cuando un usuario inicia una nueva actividad , se agrega a la actividad pila, de modo que presionar ATRÁS muestra la actividad anterior en la pila.

(de Activity and Task Design Guidelines)

+0

Por el momento tengo 1 diseño XML y 2 diseños de filas para los 27 menús, estos se completan en tiempo de ejecución. Podría hacer lo mismo para que el contenido sea honesto, ¡simplemente no lo había pensado! Sin embargo, si lo hice de esta manera, ¿no sería más fácil tener 1 actividad por página de contenido que en onCreate() rellena el diseño con el contenido apropiado? Y, finalmente, ¿qué quiere decir con: botón Atrás no se romperá, Android realiza un seguimiento de su retraso? – Stu

+0

@Stu: Actualizado mi respuesta –

+0

Gracias Peteris. Fui con "algunas actividades" al final. Tengo 1 actividad por tipo de menú (si tiene ícono o no) y 1 actividad por página de contenido. Paso los intentos en los que se establece el contenido apropiado para el diseño. ¡Parece mucho más fácil de esta manera! – Stu

0

usted puede reutilizar su disposición y puede utilizar métodos startAcitity y startActivityForResult para gestionar la efectividad actividades.

Cuestiones relacionadas