2010-08-18 20 views
5

Lo siento, sé que este tema se ha cubierto un poco. He leído las publicaciones relacionadas y todavía estoy un poco confundido. Estoy trabajando en una aplicación que, si bien el prototipo tendrá 3 pantallas principales, eventualmente tendrá docenas. Cada pantalla presentará dinámicamente cambiar el estado o tomar la entrada del usuario. Para visualizar, se requiere que se diseñe de forma similar a como lo hace MS Word o una PC típica. Tiene una barra de estado en la parte superior y una barra de navegación en la parte inferior que es común a todas las pantallas (ajustes leves para algunas pantallas, como iconos diferentes) en el medio es lo que yo llamaría un panel de vista que debe actualizarse con un diseño aplicable.Android Activities vs Views

El estado, la barra de navegación y cada pantalla están definidas en su propio archivo xml de diseño. Para mi primer botín, acabo de usar un ViewFlipper y cargué los 3 diseños de pantalla en él. Sin embargo, eso significa que actualmente tengo una Actividad principal que no se podrá mantener a medida que sigo agregando pantallas.

  1. Me parece correcto que cada diseño de pantalla tenga una clase de actividad asociada que comprenda cómo controlar esa pantalla. Necesito descubrir cómo cargar eso en el panel central dinámicamente. Sin embargo, pensé leer en otra publicación que el uso de múltiples actividades puede ser una CPU y una fuga de RAM.
  2. Actualmente intenté hacer una de las pantallas de su propia Actividad y patearla desde la Actividad principal creando un Intento y llamando a startActivity. Sin embargo, eso hace que la Actividad de la nueva pantalla resida en la parte superior de la Actividad principal. Lo interesante es que presionar el botón Atrás desestimó esa actividad y me devuelve a la principal.
  3. Hasta ahora no he descubierto cómo configurar un control de actividad diferente de lo que sucede en el panel central.
  4. Si continúo por la ruta de actividad múltiple, ¿debería heredar mi Activity principal de ActivityGroup?
  5. ¿Las clases de Vista son más aplicables en este caso?

Sé que esto ha sido un mensaje largo. Agradecería cualquier consejo. Gracias! CB

Respuesta

3

Como habrás notado, Android rastreará implícitamente una pila de actividades iniciadas en una tarea, y el botón 'atrás' terminará en la superior, reactivando la siguiente. Le aconsejaría que piense qué tipo de cosas el usuario podría esperar que haga el botón Atrás y que las actividades estén separadas en esas líneas.

No he jugado con ActivityGroup así que no puedo aconsejarlo allí. Si va con actividades completamente separadas, puede hacer que todas utilicen la misma vista de contenido "shell" con la barra de navegación/estado común. Haga que una superclase o clase de utilidad se encargue de poblar y gestionar eso desde allí. Luego use a a LayoutInflater (puede llamar al getLayoutInflater()) para completar el medio con su vista específica de la actividad.

Si desea que una de las actividades tenga varias pantallas, igual puede terminar con un ViewFlipper en la ranura central. Nuevamente, desea tener una transición de actividad donde quiera que el usuario pueda "volver"; eso también significa que NO querrá tener un cambio de actividades en los casos en que las pantallas estén estrechamente relacionadas o sean parte de la misma cosa lógica que se está haciendo. (Puede anular el comportamiento del botón Atrás, pero a menos que tenga una buena razón para hacerlo, es mejor organizar la aplicación para que la configuración básica de Android ayude a la interfaz de usuario de su aplicación en lugar de trabajar con propósitos cruzados.)

+0

Gracias por la entrada, el enfoque en el que estoy trabajando es para que mi Actividad principal brinde al usuario la opción de mostrar la pantalla inicial (A, B o C, cada uno su propia Actividad). Main lo inicia con startActivityForResult. El usuario puede elegir haciendo clic/deslizar para ir a la izquierda/derecha para ver una nueva pantalla. Sin embargo, no estoy contento con la implementación de hack que estoy haciendo. La actividad llama a Finalizar sobre sí mismo para volver al principal y reenvía la opción de usuario hacia la izquierda/derecha y la principal inicia la actividad aplicable. Por supuesto, ahora la parte posterior no funcionará como yo quiero. Sugerencias? – bursk

+0

¿Cómo quieres que vuelva al trabajo? –

+0

Supongo que redacté incorrectamente esa última parte, con la implementación actual, al hacer clic en el botón Atrás, el usuario volverá a la pantalla principal, donde seleccionará A, B o C para mostrar. Sin embargo, si el usuario está en A y se desliza para ver B, creo que la expectativa podría ser que cuando devuelven el golpe regresen a A, no a main. Sin embargo, tampoco quiero entrar en una situación en la que hayan navegado mucho y luego necesiten hacer clic una y otra vez antes de salir. Me inclino por mantener un ArrayList of Activities en mi línea principal y luego tratar de manejarlo yo mismo. – bursk

1

Si desea utilice las actividades de la manera de la que habló, podría considerar usar una actividad de pestañas. En realidad funciona de la manera que desee, solo necesita ocultar el widget de pestañas y poner allí su barra de navegación.O bien, podría ir un poco más allá y hacer que tenga un grupo de actividades parecido a una pestaña similar a la mencionada por Walter si tiene más tiempo.

+0

No lo olvide, ahora, ActivityGroup está en desuso. – alshapton

1

Puede usar un buscapersonas con fragmentos para lograr el cambio entre las diferentes vistas pero aún así permitir que su actividad tenga control total sobre él. La actividad puede controlar los menús mientras el fragmento controla su área de visualización. De esta forma, su botón Atrás descartará correctamente la actividad que contiene todas las páginas relacionadas con la actividad en lugar de bajar la pila.