2017-04-13 11 views
0

Activityクラス内のデータバインディングを使用してTabLayoutのレイアウトを拡張しています。そして、私はandroid:drawableBottomTextViewの中のデータバインディングに悩まされています。次のように私のレイアウトのコードは次のとおりです。android用のTextViewデータバインディング:drawableBottom

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android" > 

<data> 

    <variable 
     name="item" 
     type="<package-name>.HomeTabItem"/> 

</data> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:maxLines="1" 
    android:text="@={item.name}" 
    android:textColor="@color/white" 
    android:drawableBottom="<What I have to-do here>" 
    android:textSize="@dimen/dimen_18" /> 
</layout> 

次のようActivityクラス内で結合するためのJavaコードは次のように

private void setTabsLayoutItems() { 

    String tabItems[] = getResources().getStringArray(R.array.home_tab_items); 
    TypedArray tabItemsDrawable = getResources().obtainTypedArray(R.array.home_tab_items_drawable); 

    for (int i = 0; i < tabItems.length; i++) { 

     CustomTabBinding binding = DataBindingUtil.inflate(getLayoutInflater(), R.layout.custom_tab, tabLayout, false); 

     int id = tabItemsDrawable.getResourceId(i, -1); 

     HomeTabItem obj = new HomeTabItem(); 
     obj.setName(tabItems[i]); 
     obj.setIcon(id); 
     binding.setItem(obj); 
     View cropsTab = binding.getRoot(); 

     tabLayout.addTab(tabLayout.newTab().setCustomView(cropsTab)); 
    } 

    tabItemsDrawable.recycle(); 

} 

HomeTabItemクラスは次のとおりです。

public class HomeTabItem extends BaseObservable { 

    private String name; 

    private int icon; 

    @Bindable 
    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
     notifyPropertyChanged(com.sdei.farmx.BR.name); 
    } 

    @Bindable 
    public int getIcon() { 
     return icon; 
    } 

    public void setIcon(int icon) { 
     this.icon = icon; 
     notifyPropertyChanged(com.sdei.farmx.BR.icon); 
    } 

} 
+0

アンドロイド:背景= "rounded_corner_search /描画可能@" –

答えて

1

は、設定しようiconIDは直接このように:

android:drawableBottom="@{item.icon}" 

動作しない場合は、カスタムバインディングを作成して設定する必要があります。これを行うには、バインディングと呼ばれ、最終的なクラスを作成し、以下の方法を追加するには、次の

@BindingAdapter({"icon"}) 
    public static void icon(TextView view, int iconId) { 
     view.setCompoundDrawables(null,null,null, view.getContext().getDrawable(iconId)); 
} 

をそして、あなたのレイアウトでそれを呼び出す:

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:maxLines="1" 
    android:text="@={item.name}" 
    android:textColor="@color/white" 
    app:icon="@{item.icon}" 
    android:textSize="@dimen/dimen_18" /> 
</layout> 
+0

finalクラス?もっと説明できますか? –

+0

この名前の単純なクラスですか –

関連する問題