2011-08-01 17 views
15

Me di cuenta de que una de las partes más tediosas del desarrollo de Android es el diseño, incluso con el creador de maquetación.Android: crea automáticamente variables para todos los ID en xml

Después de configurar los gráficos, a continuación, el diseño, por lo que las asociaciones de variables con los elementos de diseño es muy tedioso, como ImageButton myButton = (ImageButton)findViewById(R.id.myButton);

en los diseños más grandes, estos pueden resultar tedioso para realizar un seguimiento de (recordando los nombres de los elementos) y luego la necesidad de agregar más variables en cualquier tipo de orden se vuelve frustrante.

Para mitigar un poco esto, sería muy conveniente si todos los ID declaré en el XML se asociaron de forma automática con sus variables adecuadas, y todos esos tipos de datos que ya estaban incluidas en esa clase

¿Hay algo que ya hace esto?

por ejemplo si escribo

<ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/myButton" android:id="@+id/myButton"></ImageButton> 

entonces me gustaría las clases que incluyen este diseño que ya ha

import android.ImageButton; 

ImageButton myButton; 

myButton = (ImageButton)findViewById(R.id.myButton); 

se trata de un ajuste o una función para solicitar? Estoy utilizando el Eclipse IDE y sería muy conveniente

+0

No es que yo sepa, pero estaría bien - tal vez escribirlo? :) – Jords

+0

Claro, nunca he hecho un tema de escucha de código automático ... ¿cómo podría comenzar? ¿Sería esa parte de la AVD de Android también de código abierto? – CQM

Respuesta

15

Intente utilizar Android Annotations. Proporciona anotaciones útiles para reemplazar el código repetitivo.

Por ejemplo, ver @ViewByIddocumentation: acaba de declarar los campos anotada

@ViewById 
EditText myEditText; 

@ViewById(R.id.myTextView) 
TextView textView; 

Sustituye

EditText myEditText; 

TextView textView; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    [...] 
    myEditText = (EditText) findViewById(R.id.myEditText); 
    textView = (TextView) findViewById(R.id.myTextView); 
} 
0

Esa es una solicitud de función. Es muy bueno y creo que sería bastante útil; por otro lado, hay casos en los que no funcionaría muy bien, por ejemplo, si está inflando vistas dinámicamente y no sabe, en tiempo de compilación, qué vista se inflará una Actividad en particular. Sin embargo, tiendo a pensar que este caso sería la excepción en lugar de la regla.

La manera más fácil de hacerlo sería codificar un script que escanea sus archivos XML de diseño en búsqueda de componentes con ID y crea archivos .java con las definiciones adecuadas. Entonces, sus actividades podrían derivarse de esas clases autogeneradas. Algo como esto:

Cuando procesada por su guión, que genera una clase:

class FooBarLayoutActivityBase extends Activity ... { 
    protected ImageButton myButton; 

    FooBarLayoutActivityBase() { 
    myButton = (ImageButton)findViewById(R.id.myButton); 
    } 
} 

A continuación, sólo tiene que heredar de esa clase base para utilizar los componentes ...

El enfoque del script es simple y no requiere que profundices en el código de la cadena de herramientas, pero también puedes hacerlo directamente en el complemento ADT.

+0

Tu código no funcionará, ya que el método findViewById() solo funciona después de llamar al método setContentView –

25

hice una herramienta para generar automáticamente el código Java para atar la lógica del programa de diseño de XML y juntas .

Básicamente se necesita un diseño XML, y genera todo el código Java necesario para usted en un instante. Hay soporte para las variables básicas de miembros, el patrón ViewHolder, los tipos de código ArrayAdapter, CursorAdapter y RoboGuice.

Se puede encontrar aquí: Android Layout Finder | Buzzing Android

+0

¡Gracias por publicar tu respuesta! Asegúrese de leer detenidamente [Preguntas frecuentes sobre autopromoción] (http://stackoverflow.com/faq#promotion). También tenga en cuenta que * se requiere * que publique una exención de responsabilidad cada vez que se vincula a su propio sitio/producto. –

+2

Es realmente bueno @JesperB ..... Lo estoy usando y realmente útil ... – SK16

+0

¡Buen trabajo! Le mostraré esto a todos mis amigos: D –

Cuestiones relacionadas