- utilizar variables globales
Si no quiere estropear su código con simples Intent.putExtra()
llamadas y manejar estas cosas para cada Activity
único que tendrá que utilizar variables globales dentro de la aplicación . Extienda Application
y almacene los datos que necesite mientras su aplicación esté activa. Para implementarlo realmente, use this excellent answer. Esto hará que las dependencias entre actividades desaparezcan. Por ejemplo, supongamos que necesita un "nombre de usuario" para su aplicación durante el ciclo de vida de la aplicación; esta es una excelente herramienta para eso. No necesita llamadas sucias Intent.putExtra()
.
Un error común al hacer la primera aplicación Android es que uno por lo general simplemente comenzar a escribir las vistas XML. Los archivos XML llegarán (sin problema y muy rápido) a muchas líneas de código. Aquí puede tener una solución donde solo usa el atributo style
para implementar un comportamiento específico. Por ejemplo, considere este pedazo de código:
valores/styles.xml:
<style name="TitleText">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:textSize">18sp</item>
<item name="android:textColor">#000</item>
<item name="android:textStyle">bold</item>
</style>
diseño/main.xml:
Ahora, si usted tiene, digamos, dos TextView
sy ambos deben tener el mismo comportamiento, haga que utilicen el estilo TitleText
. Código de muestra:
<!--- ... -->
<TextView
android:id="@+id/textview_one"
style="@style/TitleText"
/>
<TextView
android:id="@+id/textview_two"
style="@style/TitleText"
/>
<!--- ... -->
Simple y no necesita duplicar el código. Si realmente desea profundizar en este tema en particular, consulte Layout Tricks: Creating Reusable UI Components.
Este punto es corto, pero creo que es importante mencionar que. Otro error que pueden cometer los desarrolladores es omitir strings.xml y simplemente escribir mensajes de IU (y nombres de atributos) dentro del código (donde lo necesitará). Para hacer que su aplicación sea más fácil de mantener; solo defina mensajes y atributos en el archivo strings.xml.
- crear y utilizar una clase de herramienta global
Cuando escribí mi primer métodos donde lo necesitaba aplicación que acabo de escribir (y duplicado). ¿El resultado? Una gran cantidad de métodos que tenían el mismo comportamiento entre varias actividades. Lo que aprendí es hacer una clase de herramienta. Por ejemplo, supongamos que debe realizar solicitudes web en todas sus actividades. En ese caso, omita definirlos dentro del Activity
real y cree un método estático para ello.Código de ejemplo:
public final class Tools {
private Tools() {
}
public static final void sendData(String url,
String user, String pass) {
// URLConnections, HttpClients, etc...
}
}
Ahora, sólo puede utilizar este código de abajo en su Activity
que necesita para enviar datos hacia un servidor:
Tools.sendData("www.www.www", "user", "pass");
Sin embargo, usted consigue el punto. Utilice este "patrón" donde lo necesite, le evitará estropear su código.
- Let clases personalizadas definen el comportamiento en el que el usuario tiene que interactuar con la aplicación
Este es probablemente el punto más útil. Para definir "donde el usuario necesita interactuar con su aplicación" digamos que tiene un Menu
, cuyo comportamiento es muy largo en términos de líneas, ¿por qué mantenemos los cálculos de Menu
en la misma clase? Cada pequeño elemento hará que su clase Activity
sea una pieza dolorosa de código más largo; su código se verá como "spaghetti". Por ejemplo, en lugar de tener algo como esto:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem item;
item = menu.findItem(R.id.menu_id_one);
if (aBooleanVariable) {
item.setEnabled(true);
} else {
item.setEnabled(false);
}
// More code...
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem i) {
// Code, calculations...
// ...
// ...
return super.onOptionsItemSelected(i);
}
rediseñarlo a algo como esto:
private MyCustomMenuInstance mMenuInstance;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mMenuInstance = new MyCustomMenuInstance();
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
mMenuInstance.onPrepareOptionsMenu(menu);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem i) {
mMenuInstance.onOptionsItemSelected(i);
return super.onOptionsItemSelected(i);
}
Por ejemplo, MyCustomMenuInstance
:
public class MyCustomMenuInstance {
// Member fields..
public MyCustomMenuInstance() {
// Init stuff.
}
public void onPrepareOptionsMenu(Menu menu) {
// Do things..
// Maybe you want to modify a variable in the Activity
// class? Well, pass an instance as an argument and create
// a method for it in your Activity class.
}
public void onOptionsItemSelected(MenuItem i) {
// Do things..
// Maybe you want to modify a variable in the Activity
// class? Well, pass an instance as an argument and create
// a method for it in your Activity class.
}
}
A ver dónde va esto. Puede aplicar esto a muchas cosas, p. onClick
, onClickListener
, onCreateOptionsMenu
, la lista es larga. Para conocer más "mejores prácticas", puede ver algunas aplicaciones de muestra de Google here. Busque cómo han implementado las cosas de una manera agradable y correcta.
Última palabra; Mantenga limpio su código, nombre sus variables y métodos de una manera lógica y especialmente de manera correcta. Siempre, siempre entienda dónde se encuentra en su código, eso es muy importante.
Sin un ejemplo de lo que usted considera una estructura "spaghetti" forzada por la programación de eventos, será difícil que alguien le aconseje. – CommonsWare
Un ejemplo de cómo realizar un seguimiento de los estados de programa condicionales al usar llamadas como showDialog()/onDialogCreate() cuando se combina con un oyente de botón dentro del cuadro de diálogo. Puede ser complicado gestionar el flujo. – Ryan
Quizás no deba usar diálogos. :-) Los diálogos en Android deberían ser la excepción, no la regla. Un ejemplo: relativamente pocas aplicaciones web usan un diálogo modal (equivalentes de HTML), aunque ciertamente es posible con la biblioteca correcta. – CommonsWare