Yigit Boyar và George Mount thành viên của nhóm bộ công cụ giao diện người dùng Android đã cho một talk on databinding. Trong video tại 13:41 George Mount nói điều nàyDatabinding: Bind phương pháp duy nhất từ người nghe với nhiều phương pháp
Bạn cũng có thể thực hiện một số người nghe kỳ lạ, như onTextChanged. TextWatcher có ba phương pháp trên đó, nhưng mọi người chỉ quan tâm đến onTextChanged, phải không? Bạn thực sự có thể truy cập chỉ một trong số họ nếu bạn muốn hoặc tất cả chúng. "
<Button android:onTextChanged="@{handlers.textChanged}" …/>
Ông dường như nói rằng thay vì sử dụng addTextChangedListener phương pháp thông thường mà trông giống như sau
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//Do something
}
@Override
public void afterTextChanged(Editable editable) {}
});
chúng tôi chỉ có thể làm lớp
<EditText
android:onTextChanged="@{handlers::onTextChanged}"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Handlers này
public class Handlers{
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Do something
}
}
Mã hoạt động trong trường hợp này, nhưng nó dường như không hoạt động trong các trường hợp khác mà người nghe có nhiều phương pháp như phương pháp addOnPageChangeListener của ViewPager. Ví dụ này không làm việc
<android.support.v4.view.ViewPager
android:OnPageSelected="@{handlers::onPageSelected}"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
và lớp Handlers
public class Handlers{
public void onPageSelected(int position) {
//Do something
}
}
Dự án spits ra lỗi này khi cố gắng xây dựng
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:Could not resolve handlers::onPageSelected as a listener.
****\ data binding error ****
Tôi là một chút bối rối bây giờ bởi vì nó chỉ ra rằng EditText thực sự có một phương pháp onTextChanged được thừa hưởng mà thư viện dữ liệu cũng có thể ràng buộc android:onTextChanged="@{handlers::onTextChanged}"
. Vì vậy, câu hỏi của tôi là nó thực sự có thể ràng buộc với một phương pháp nghe duy nhất và tôi đang thiếu một cái gì đó, hoặc George Mount đã làm cho một sai lầm trong cuộc nói chuyện của mình?
Awesome! Trả lời thẳng từ miệng ngựa :) – Olumide