Diseño de código para elementos de IU de arrastrar y soltar reutilizables en android
Soy nuevo en android y escribo una aplicación de aprendizaje para niños en la escuela primaria. La aplicación es para practicar cálculos simples (sumar y restar).
Hasta ahora, he terminado el diseño de interfaz de usuario y he escrito una sencilla prueba de concepto de implementación para demostrar el uso básico de la aplicación.
- ArrayAdapter está repitiendo el encabezado de interfaz de usuario para cada elemento de ListView
- Barra de progreso redondeada en ambos lados en android
- Cómo obtener el tamaño total de la pantalla en un dispositivo android programaticamente
- Diseño de material en sdk antiguo
- Buen diseño de la interfaz de usuario: ¿Cómo manejar ListView vacío?
El diseño de una de las actividades (adición de 123 y 456) sería así:
|-----------------------------| | |c| 1 |c| 2 |c| 3 | | | | 4 5 6 | | -------------------- | | | r1 | | r2 | | r3 | | | | | | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | cancel | check | |-----------------------------|
Los números (0-9) en el numblock son vistas que se pueden arrastrar y soltar a los campos carry ( |c|
) o los campos de resultados ( |r1|
etc). Los valores ya eliminados en los campos de transporte o resultado también se pueden mover (otra vez con arrastrar y soltar) a otro campo de transporte o resultado.
Va a haber varios modos de práctica, por ejemplo:
|-----------------------------| | 1 + 9 = |r1|r2| | | 2 + 8 = |r1|r2| | | 3 + 7 = |r1|r2| | | 4 + 6 = |r1|r2| | | 5 + 5 = |r1|r2| | | | | | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | cancel | check | |-----------------------------|
o:
|-----------------------------| | 1 2 3 4 5 | | | | | | | | | |+| |+| | | | | | | | | |r1| |r2| | | | | | | | | \ \ / | | \ |-| | | \ | | | \ |r3| | | \ / | | \ / | | |+| | | | | | |r4| | | | | | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | cancel | check | |-----------------------------|
Para mi implementación actual, tengo todas las cosas de arrastrar y soltar en una actividad y el diseño es un solo archivo .xml
.
Me gustaría reutilizar el código para la funcionalidad de arrastrar y soltar de alguna manera para mantener el código limpio y no tener la misma funcionalidad implementada en muchas actividades diferentes.
Ya he leído acerca de fragmentos en android y pensé en hacer un fragmento para el numblock y un fragmento para cada área donde los números serían eliminados, pero en lo que he investigado, arrastrar y soltar entre fragmentos no es realmente el camino a seguir aquí Y la caída entre dos fragmentos , la solución propuesta no parece ser muy elegante).
En este momento, estoy pensando en crear todo el contenido, pero el numblock dinámicamente en onCreate()
de una sola actividad dependiendo del modo requerido. Me gustaría su opinión sobre este enfoque. ¿Hay problemas probables al ir de esa manera?
¿Hay otra manera de lograr la misma funcionalidad y mantener el código de mantenimiento? ¿Tienes sugerencias sobre cómo podría diseñar mi código lo más simple y mantenible posible? ¿Cómo diseñarías una aplicación con la funcionalidad requerida?
- Android Radial / Pie Menú
- ¿Por qué el teclado virtual muestra o no cuando se inicia una actividad?
- La elección de un motor de juego 2D para un juego de aventura simple estilo Zelda
- ¿Una manera fácil de construir la interfaz de usuario de Android?
- Disposición de interfaz de usuario de dos pasos: ¿Por qué?
- Cómo arreglar este código todas las pantallas de Android
- PlacePicker.IntentBuilder se cierra inmediatamente después de abrir
- Error cómico en la declaración de forma xml de Android
El consejo general de que dejar las decisiones de diseño hasta que tengas que hacerlas se aplicaría ciertamente aquí. Estoy seguro de que hay cientos de formas en las que podría organizar código como este.
En la actividad (o podría ser un fragmento) hasta ahora tiene la siguiente funcionalidad:
- Arrastrar y soltar números
- Calculando si la respuesta es correcta
- Configurar el problema
- Hacer las cosas que todas las actividades deben hacer – por ejemplo, tener un onCreate ()
¿Puedes dividir esas diferentes funcionalidades de alguna manera?
¿Hay cosas que son buenos candidatos para hacer allí propias clases?
- ¿Números arrastrables?
- ¿Números no arrastrables?
- ¿Símbolos matemáticos?
- Lugares que arrastra desde y hacia?
- Filas que forman un cálculo (que puede anidarse uno encima del otro)?
¿Cómo se comunicarán estos elementos entre sí?
- ¿Para calcular si la respuesta es correcta?
- ¿Para que un elemento sepa dónde está?
¿Cómo va a crear una nueva instancia de la Actividad?
- ¿Qué datos pasará a la Actividad?
- ¿Desea llamar a uno de un número definido de diferentes tipos?
- ¿Cómo se determinará qué tipo de cargas de la actividad?
Ni siquiera he empezado a responder a su pregunta y, sin embargo, esta respuesta es muy larga.
La pregunta más importante es ¿qué quieres del diseño? Supongo que la respuesta es hacerlo lo más fácil posible para agregar nuevos tipos de problemas a la aplicación.
Cosas que pueden ayudarle:
- Puede agregar vistas de forma programática a un diseño. No es necesario especificar las cosas en un archivo xml. Esto podría ser simplemente utilizado para generar nuevos números cuando se arrastra desde la parte inferior o más compleja para definir las configuraciones completas mediante programación.
- Me imagino que las interfaces y los oyentes serán la mejor manera para que los elementos se comuniquen.
- Puede ser bueno echar un vistazo a algunos patrones: Template Method, Static Factory Method o incluso la estrategia podría ser útil aquí.
- Recuerde que puede dividir la funcionalidad en archivos separados de Java fácilmente desde Actividades y luego llamarlos según sea necesario.
- Se siente bastante juego como. Creo que es 50/50 en cuanto a si vale la pena pasar el tiempo buscando en si un motor de juego podría ayudarle.
- Manténgalo simple – se adhieren a la división de una cosa a la vez. Trabajar en una clase a la vez. No intentaría hacer un diseño enorme, complejo e intrincado a la vez.
- ¿Es posible actualizar Media Store en Android Nougat?
- Unity 2D: ¿Cómo soportar plataformas múltiples y diferentes dispositivos de relación de aspecto en Unity 2D?