2017-09-22 3 views
0

ObservableListのサイズをバインドする方法はありますか。私は項目 - の大きさを見せたい景色TextViewAndroidでのObservableListのバインドサイズデータバインディング

// ViewModel 
class ViewModel { 
    ... 
    public final ObservableList<Item> items = new ObservableList<>() 
    ... 
} 

と私の見る

// View 
<layout> 
    <data> 
     <variable name="viewmodel" type="com.myapp.ViewModel" /> 
    </data> 

    <TextView 
     ... 
     android:text="@{viewmodel.items.???}" 
    /> 
</layout> 

:このような私のアンドロイドアプリでObservableListでデータバインディングライブラリを使用して
- 私リスト。私はandroid:text="viewmodel.items.sizeまたはviewmodel.items.size()を使用しようとしましたが、それはうまくいきません。これどうやってするの?

答えて

2

は、私は、次の2つの解決策を見つけた答え。問題は、Integerを返すので、android:text要素の文字列に変換する必要があることです。これはString.valueOf()メソッドで行うことができます。ヘルパーのようにビューをint使用することができますのviewmodelはsizeOfList(List list)のようなメソッドを定義することができます

方法使用

<layout> 
    <data> 
     <variable name="viewmodel" type="com.myapp.ViewModel" /> 
    </data> 

    <TextView 
     ... 
     android:text="@{String.valueOf(viewmodel.items.size())}" 
    /> 
</layout> 

:あなたのヒントの

<layout> 
    <data> 
     <variable name="viewmodel" type="com.myapp.ViewModel" /> 
    </data> 

    <TextView 
     ... 
     android:text="@{String.valueOf(viewmodel.sizeOfList(viewmodel.items))}" 
    /> 
</layout> 

0

INCORRECT

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android"> 
<data> 
    <variable name="viewmodel" type="com.myapp.ViewModel "/> 
</data> 
<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@{viewmodel.items::size()}"/> 
</LinearLayout> 
</layout> 

私はあなただけ@ {::}を忘れてしまったObservableListがhttps://developer.android.com/reference/android/databinding/ObservableList.html に応じてリストからサイズ()関数を継承しているので... はこのようにそれをしようと思います

**正解HERE「::」あなたが使用する必要があるメソッドを参照するために https://developer.android.com/topic/libraries/data-binding/index.html#method_references によるとMORE CL明記すぐに**

もしあなたのモデルgetListSize()でメソッドを作成し、@ {viewmodel :: getListSize()}を使ってリストのサイズを返してください!

直接サイズ()メソッド

items.size()作品の使用方法:ダニーMinassiansの助けを借りて

+0

おかげけどを '@ {::} 'アンウォールではない。 :: onメソッドは、onClickのようなイベントで実行するためのメソッドをバインドします。それにもかかわらず、 '@ {viewmodel.getListSize()}のアプローチが有効です(ただし、" :: "ではなく"。 "を使用する必要があります)。 – Schlangguru

関連する問題