2016-11-28 25 views
15

これは最も基本的な質問ですが、チュートリアルとドキュメントhereを読んで1日を過ごした後で、これらの方法をどこに置くべきかわかりません。この物が置かれている箇所には、静的メソッドで注釈を使用することだけが言及されています。どのような静的メソッドですか?クラスに関係なくすべての静的メソッド良い練習は何ですか?これらすべての静的メソッドをホストするCustomBindingクラスを作成しますか?どこに配置するかBindingAdapterメソッド?

メソッドにBindingAdapterアノテーションがあり、最初のパラメータがViewである限り、正常に動作しますか?

最初のパラメータがView型であると仮定します。どの種類のビューにもバインディング属性を配置できますが、それはメソッドをトリガーしますか?したがって、EditTextという特定のビューがある場合、レイアウトファイルのEditTextビューでその属性が見つかった場合にのみメソッドが呼び出されることを意味しますか?

+1

[TextViewBindingAdapter](https://android.googlesource.com/platform/frameworks/data-binding/+/android-6.0.0_r7/extensions/baseAdapters/src/)のような既存のアダプタでどのように処理されるかをご覧ください。 main/java/android/databinding/adapters/TextViewBindingAdapter.java)と[親フォルダ](https://android.googlesource.com/platform/frameworks/data-binding/+/android-6.0.0_r7/extensions/baseAdapters/ src/main/java/android/databinding/adapters) – pskink

答えて

11

インターネットをナビゲートした後、私は開発者の一人からいくつかの情報をついに見つけました自分自身。私は彼らがドキュメントの基本についてより明確になったと思います。

Quote

バインディングアダプタはちょうどこれを行うために使用されているすべてのクラスのメソッドを注釈を付けています。通常、アダプターはターゲットViewタイプに基づいてクラスを[-a]に編成します。

これは明らかに、コンパイル時に、注釈BindingAdapterを持つすべてのクラスのすべてのメソッドがBindingAdapterを生成することを意味します。

1

モデルクラスに配置します。

例:

XML:

<data> 

    <variable 
     name="item" 
     type="com.yourpackage.Model"/> 
     </data> 
     ...... 

      <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@{item.resId}"/> 

モデル:

public class Model { 

@DrawableRes 
private final int resId; 

public Model(int resId) { 
    this.resId = resId; 
} 

public int getResId() { 
    return resId; 
} 

@BindingAdapter ("android:src") 
public static void setImageResource(ImageView imageView, int resource){ 
    imageView.setImageResource(resource); 
} 

}

+0

これが唯一の方法であるのか、それともあなたの方法であるのかを説明してください。いくつかのBindingAdapterがクラス内にグループ化されています(例:https://android.googlesource.com/platform/frameworks/data-binding/+/android-6.0.0_r7/extensions/baseAdapters/src/main/java/android/)。 databinding/adapters/TextViewBindingAdapter.java – chaser

+2

モデルクラスは、このBindingAdapterを配置するのに適していないとは思いません。これは、モデルと結合するためのものではないからです。たとえば、@BindingAdapter( "android:src")という2つの画像を200x200に拡大する画像と400x400に画像を拡大する画像を作成することはできません。私はバインディングのために特別にクラスに入れるほうが良いかもしれないと思います(例えば 'BindingAdapterUtils')。 – Sam

+0

@Samカスタム表示なしでバインディングアダプタを使用しているときに何か考えていますか?私は他のファイルに持ってきてみましたが、タグに入れる方法が分かりません – TruongHieu

関連する問題