是否可以使用
Android绑定功能将setonPagechangelistener的处理程序绑定到XML文件中的ViewPager?
演示显示onClick事件,但我很好奇我可以用它实现多少事件功能.关于数据绑定功能的任何链接也都很棒.谢谢.
假设的例子:
example_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="handlers" type="com.example.Handlers"/>
</data>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:onPagechangelistener="@{handlers.pageChanged}" />
</layout>
Handler.java
package com.example.viewmodels;
import android.view.View;
public class Handlers {
public void pageChanged(View view){}
}
编译错误是:
错误:(62)在’android’包中找不到属性’onPagechangelistener’的资源标识符
解决方法
有可能这样做.您需要实现自定义绑定适配器,因为没有为Android支持库中的View类预定义BindingAdapter类.
有关如何实现自定义适配器的信息,请阅读this.
代码应该如下所示,我没有彻底测试它们:
<android.support.v4.view.ViewPager
android:id="@+id/pager"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:onPagechangelistener="@{handlers}" />
您的BindingAapter代码:
@BindingAdapter("onPagechangelistener")
public static void setonPagechangelistener(ViewPager viewPager,ViewPager.OnPagechangelistener listener) {
Log.i("setonPagechangelistener");
// clear listeners first avoid adding duplicate listener upon calling notify update related code
viewPager.clearOnPagechangelisteners();
viewPager.addOnPagechangelistener(listener);
}
附:您传递的处理程序类应该实现ViewPager.OnPagechangelistener.