2011-02-19 20 views
9

Mümkün, buAndroid, XML'de Checkbox dinleyicisi?

XML gibi şeyler yapmak:

<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); 
} 

ama bir gereklilik yöntemi, kamu boşluk ve en önemli almak olması gerektiğini, orada Bir argüman olarak görüntüle.

Şimdi aynı şeyi yapmak istiyorum ama Checkbox butonu ile. Checkbox'ta android var: onclick özniteliği, ancak Android eğitiminde (http://developer.android.com/resources/samples/ContactManager/index.html) bu kodu görebiliyorum

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

Bu yüzden bir onCheckedChanged var. CompoundButton buttonView, boolean isChecked) yöntemi. Bunu XML ile yapmanın bir yolu var mı? Android: onCheckedChange özniteliği, yalnızca android: onClick özniteliği var, ancak yukarıda yazdığım gibi, bu özniteliğin adı, bir argüman olarak View alan, ilgili yöntem adına sahip olmalıdır, ancak yukarıdaki koddan, bir yöntemle birlikte olması gerektiğini anlıyorum. BileşikButton ve boole argümanları.

Bunu "XML yolunda" yapmanın herhangi bir yolu var mı?

cevap

4

Spinner Widget'tan onItemSelected olayıyla benzer bir sorun buldum. Görünüşe göre Android ekibi, onClick olayını XML'ye bildirmemize yetecek kadar yeterli olduğunu düşündü: S.

6

Resmi belgeler: 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

kütüphaneyi bağlama verilerin kullanımı ile bunu yapmak artık mümkün. İlk önce bir işleyici sınıfı oluşturmalısınız (bu örnekte, bunu MainActivityHandlers olarak adlandırıyorum). Bu işleyici sınıfının içinde, senin düzen dosyasında Sonra gelen uygulanması bir yöntem (örneğin isim method1 olan) tanımlamak, sadece uygulamak gerekir:

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

ve gitmek iyisin. Daha fazla bilgi: https://developer.android.com/topic/libraries/data-binding/index.html

İlgili konular