2011-02-19 19 views
9

Es posible, para hacer cosas como estaAndroid, oyente Checkbox en XML?

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
    <Button android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/addContactButton" 
       android:text="@string/addContactButtonLabel" 
       android:onClick="launchContactAdder"/><!-- here --> 

</LinearLayout> 

Java:

public void launchContactAdder(View v) 
{ 
    Intent i = new Intent(this, ContactAdder.class); 
    startActivity(i); 
} 

pero no es un requisito, que el método debe ser pública, sin efecto y el más importante toma View como argumento

Ahora me gustaría hacer exactamente lo mismo pero con el botón de casilla de verificación. Casilla de verificación tiene androide: onclick atributo, pero en el tutorial Android (http://developer.android.com/resources/samples/ContactManager/index.html) que puede ver el código

showInvisibleControl.setOnCheckedChangeListener(new OnCheckedChangeListener() 
{ 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
    { 
     Log.d(TAG, "mShowInvisibleControl changed: " + isChecked); 
     showInvisible = isChecked; 
     populateContactList(); 
    } 
}); 

así que hay una OnCheckedChanged (CompoundButton buttonView, boolean isChecked) método. ¿Hay alguna forma de hacer esto por XML? No hay ningún atributo android: onCheckedChange, solo el atributo android: onClick, pero como escribí anteriormente, el nombre de ese atributo debe tener el nombre del método correspondiente, que toma View como argumento, pero desde el código anterior entiendo que debo tener un método con CompoundButton y argumentos booleanos.

¿Alguna manera de hacerlo en "forma XML"?

Respuesta

4

Encontré un problema similar con el evento onItemSelected del Spinner Widget. Aparentemente, el equipo de Android pensó que ya nos había bastado para XML el evento onClick: S.

6

documentación oficial: https://developer.android.com/guide/topics/ui/controls/checkbox.html

<CheckBox android:id="@+id/checkbox_meat" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/meat" 
    android:onClick="onCheckboxClicked"/> 
<CheckBox android:id="@+id/checkbox_cheese" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/cheese" 
    android:onClick="onCheckboxClicked"/> 
2

Ahora es posible hacer esto con el uso de la biblioteca de enlace de datos. Primero necesita crear una clase de controlador (en este ejemplo, lo llamo MainActivityHandlers). Dentro de esta clase de controlador, definir un método (por ejemplo, el nombre es metodo1) con la aplicación correspondiente Luego, en el archivo de diseño, sólo tiene que poner en práctica:

... 
<data> 
    <variable 
     name="handler" 
     type="com.test.android.testapp.MainActivityHandlers" /> 
</data> 
... 
     <RadioGroup 
     ... 
     android:onCheckedChanged="@{handler.method1}" 
     ... 
     > 

y ya está bueno para ir. Más información: https://developer.android.com/topic/libraries/data-binding/index.html