2011-02-19 32 views
9

Có thể, để làm những việc như thế nàyAndroid, Trình nghe hộp kiểm trong 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); 
} 

nhưng có một yêu cầu, rằng phương pháp này phải được công khai, khoảng trống và quan trọng nhất lấy View làm đối số.

Bây giờ tôi muốn thực hiện chính xác điều tương tự nhưng với nút Hộp kiểm. Checkbox có android: onclick thuộc tính, nhưng trong Android hướng dẫn (http://developer.android.com/resources/samples/ContactManager/index.html) Tôi có thể nhìn thấy đoạn mã này

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

Vì vậy, có một onCheckedChanged (Nút CompoundButton buttonView, boolean isChecked). Có cách nào để làm điều này bằng XML? Không có thuộc tính android: onCheckedChange, chỉ thuộc tính android: onClick, nhưng như tôi đã viết ở trên, tên của thuộc tính đó phải có tên phương thức tương ứng, có dạng Xem làm đối số, nhưng từ mã ở trên tôi hiểu rằng tôi phải có phương thức CompoundButton và đối số boolean.

Bất kỳ cách nào để thực hiện điều đó theo "cách XML"?

Trả lời

4

Tôi đã tìm thấy sự cố tương tự với sự kiện onItemSelected từ Tiện ích Spinner. Rõ ràng là nhóm Android nghĩ rằng đã đủ cho phép chúng tôi XML sự kiện onClick: S.

6

tài liệu chính thức: 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

Nó bây giờ có thể làm điều này với việc sử dụng các dữ liệu ràng buộc thư viện. Trước tiên, bạn cần tạo một lớp trình xử lý (trong ví dụ này, tôi gọi nó là MainActivityHandlers). Bên trong lớp xử lý này, xác định một phương pháp (ví dụ tên là method1) với việc thực hiện tương ứng Sau đó, trong file layout của bạn, bạn chỉ cần thực hiện:

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

và bạn tốt để đi. Thông tin khác: https://developer.android.com/topic/libraries/data-binding/index.html

Các vấn đề liên quan