适用于ViewPager的Android事件侦听器数据绑定 [英] Android Event Listener Data Binding for ViewPager

查看:86
本文介绍了适用于ViewPager的Android事件侦听器数据绑定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以使用Android绑定功能将setOnPageChangeListener的处理程序绑定到XML文件中的ViewPager?

Is it possible to bind a handler for setOnPageChangeListener to a ViewPager in XML file with the Android Binding functionality?

演示展示了onClick事件,但是我很好奇我可以实现多少事件功能.关于数据绑定功能的任何链接也将很好.谢谢.

The demos show onClick events but I am curious as to how much event functionality I can implement with it. Any links on the capabilities of Data Binding would be great as well. Thanks.

假设的例子:

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'的资源标识符

Error:(62) No resource identifier found for attribute 'onPageChangeListener' in package 'android'

推荐答案

可以这样做.您需要实现自定义绑定适配器,因为Android支持库中没有为View类预定义的BindingAdapter类.

It is possible to do this. You need to implement a custom binding adapter because there is no BindingAdapter classes predefined for View classes from Android support libraries.

有关如何实现自定义适配器的信息,请阅读.

For how to implement the custom adapter you may read this.

代码应类似于以下内容,但我尚未对其进行全面测试:

The code should be something like the below, I haven't tested them thoroughly:

<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代码:

Your BindingAapter code:

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

P.S.您传递的处理程序类应实现ViewPager.OnPageChangeListener.

P.S. Your handler class being passed should implement ViewPager.OnPageChangeListener.

这篇关于适用于ViewPager的Android事件侦听器数据绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆