私は、ビューIDを含む変数によって定義された位置にスクロールする小さなカスタムBindingAdapterを書きました。 私はそれが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>
おそらくないあなたが探している全く異なるアプローチを。しかし、私はバターナイフを少なくともバインダーのフィールドを使って取り除くことができると思います: binding.myscroller.scrollTo (ここでは、ビューのIDをR.id.myscrollerに設定しています) – Till
ええと@Till、あなたは間違いなしです。もう少し研究した後、私はそのようなバインドされたビューを得ることができるという事実を得ました! ;) – grumpyshoe