2016-10-01 12 views
3

私は私のAndroidアプリでデータバインディングを使用していますが、誰が私を答えることができなかった一つの質問があります...データバインディングを使用してScrollViewの位置をスクロールする方法はありますか?私のScrollViewが含まれている場合

一部私はデータバインディングを使用して、特定のtextinputlayoutにスクロールできるかInputditText要素を含むTextInputLayout? 今日私はButterknifeを使用してscrollviewをバインドしています。手動でビューのこの位置にスクロールする必要がありますが、それ以外の方法はないのでしょうか?

誰かアイデア?

+1

おそらくないあなたが探している全く異なるアプローチを。しかし、私はバターナイフを少なくともバインダーのフィールドを使って取り除くことができると思います: binding.myscroller.scrollTo (ここでは、ビューのIDをR.id.myscrollerに設定しています) – Till

+0

ええと@Till、あなたは間違いなしです。もう少し研究した後、私はそのようなバインドされたビューを得ることができるという事実を得ました! ;) – grumpyshoe

答えて

1

私は、ビュー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> 
+0

メソッド宣言で 'static'を見落とさないようにしてください。私は@grumpyshoeの答えでそれを真っ暗にしました。 – tir38

+0

ScrollViewをパラメータとして渡せない場合、どのように 'scrollList'関数を呼び出すのですか? –

+0

@AntonisTsimourtosなぜScrollViewをパラメータとして渡せないのかわかりません! 作成するBindingAdapterには、最初のパラメータとしての独自のビューがあり、2番目のパラメータは渡されたものです。 これを使用する場所や方法の詳細を説明できますか? – grumpyshoe

関連する問題