如何使用数据绑定滚动到ScrollView上的位置?

时间:2016-10-01 20:15:33

标签: android data-binding scrollview

我在我的Android应用程序中使用数据绑定,但有一个问题,没人能回答我......

如果我的ScrollView包含一些包含 InputditText 元素的 TextInputLayout ,我如何使用数据绑定滚动到特定的textinputlayout? 现在我使用Butterknife,绑定scrollview,并且必须通过手动滚动到该视图的这个位置,但我想知道是否没有其他方法可以做到这一点。

有人有想法吗?

1 个答案:

答案 0 :(得分:1)

我写了一个小的自定义BindingAdapter,它滚动到由包含视图id的变量定义的位置。 我知道它包含 findViewById ,但对我来说还可以。

@BindingAdapter("scrollTo")
public static void scrollTo(ScrollView view, int viewId) {

    if (viewId == 0) {
        view.scrollTo(0, 0);
        return;
    }

    View v = view.findViewById(viewId);
    view.scrollTo(0, v.getTop());
    v.requestFocus();
}

由于使用数据绑定,我可以在我的xml中轻松添加此适配器:

<?xml version="1.0" encoding="utf-8"?>
<layout>
    <data>
        <variable
            name="viewModel"
            type="com.grumpyshoe.myapp.features.dashboard.viewmodel.DashboardViewmodel"/>
    </data>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              android:id="@+id/root_dashboard"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="@android:color/transparent"
              android:focusable="true"
              android:focusableInTouchMode="true"
              android:orientation="vertical">

        <ScrollView
            android:id="@+id/bank_account_scroll_wrapper"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fillViewport="true"
            app:scrollTo="@{viewModel.focusedViewId}"> 

        [...]
    </LinearLayout>
</layout>