2017-09-19 57 views
-1
<Button 
     android:id="@+id/onboard_next_button" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textColor="@color/white" 
     android:text="@string/next" 
     android:onClick="@{vm::onButtonNext}" 
     android:background="@color/customColor" 
     android:layout_alignParentBottom="true"/> 

我正在实现按钮上的viewpager页面更改逻辑。如果它是标准的MVC,这是非常容易的。所有我需要做的就是因为viewPager比如在我的片段或活动的存在是为了写类似viewPager页面更改为android MVVM

@Override 
public void onButtonNext(View view) { 
    // viewPager does not exist in my onButtonNext function because this is the viewModel 
    viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, true); 
} 

但是,因为我在MVVM中实现了这个功能,所以我无法访问viewPager。如果我无法访问viewPager实例,如何在viewModel中实现viewPager.setCurrentItem?

+0

那么您可以访问使用您的布局名称databing像MyLayoutBinding.viewpager –

回答

1

但是,因为我在MVVM中实现了这个功能,所以我无法访问 viewPager。如果我无法访问viewPager实例,如何在我的 viewModel中实现viewPager.setCurrentItem?

您需要一个用@BindingAdapter注解的public static void方法。

例如

@BindingAdapter("currentItem") 
    public static void setCurrentItem(ViewPager viewPager, int item) { 
    } 

并在布局中将使用类似app:currentItem。当然你的虚拟机必须提供物品的int属性或者吸气剂。 Android负责其余部分。你可以阅读更多关于BindingAdapterhere

+0

比如我应该在哪里定义这个'@ BindingAdapter'方法是定义一些ID您ViewPager? –

+0

这是一个静态方法。这并不重要。在过去,我有我的'CustomBinding'实用类,在那里我把所有'@ BindingAdapter'方法。你可以做同样的 – Blackbelt

+0

我得到关于第二个参数 - 'int item'的部分。 但是这个'@BindingAdapter(“currentItem”)'附加到xml中的'Button'视图对象,而不是xml中的'ViewPager'对象。 所以我们'currentItem'绑定适配器仍然无法访问我看到的'ViewPager'对象 –

相关问题