是否可以使用
Android绑定功能将setOnPageChangeListener的处理程序绑定到XML文件中的ViewPager?
@H_301_2@演示显示onClick事件,但我很好奇我可以用它实现多少事件功能.关于数据绑定功能的任何链接也都很棒.谢谢.
@H_301_2@假设的例子:
@H_301_2@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>@H_301_2@Handler.java
package com.example.viewmodels; import android.view.View; public class Handlers { public void pageChanged(View view){} }@H_301_2@编译错误是: @H_301_2@错误:(62)在’android’包中找不到属性’onPageChangeListener’的资源标识符
解决方法
有可能这样做.您需要实现自定义绑定适配器,因为没有为Android支持库中的View类预定义BindingAdapter类.
@H_301_2@有关如何实现自定义适配器的信息,请阅读this.
@H_301_2@代码应该如下所示,我没有彻底测试它们:
<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}" />@H_301_2@您的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); }@H_301_2@附:您传递的处理程序类应该实现ViewPager.OnPageChangeListener.