DataBinding使用の詳細
9000 ワード
コンフィギュレーション Moduleのbuild.gradle androidモジュールには、 の構成が追加されています.
レイアウト
エンティティークラス
使用
BindingAdapter注記カスタム属性の設定この注釈を使用して、ImageViewが直接ネットワークピクチャをロードするように設定するなど、コントロールのプロパティをカスタマイズできます(もちろんGlideなどのネットワークピクチャロードフレームワークの助けを借りなければなりません.詳細はコードを参照してください). は、 を使用します.
データオブジェクト(Data Objects)いわゆる双方向バインディングは、実際にはnotifyDatasetChangedのような操作であり、具体的にはコード: xml Observable Collections:ObservableField,ObservableBoolean,ObservableIntなどの基礎変数タイプをサポートするほか、ObservableArrayMap,ObservableArrayListなどの集合フレームワークもサポートされるのは当然です.通常のMap、Listとほぼ同じ を使用は十分ではないかもしれませんが、一時的に十分で、記録になります.
android {
dataBinding {
enabled = true
}
}
レイアウト
エンティティークラス
public class UserBean {
private String name; //
private int age; //
public UserBean(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
使用
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
UserBean userBean = new UserBean ("Luuren", "26");
binding.setUser(userBean );
}
}
BindingAdapter注記カスタム属性の設定
public class ImageHelper {
/**
* 1. ,
* 2. @BindingAdapter ,imageUrl ,
* ImageView imageUrl , loadImage ,
*
* @param imageView ImageView
* @param url
*/
@BindingAdapter({"imageUrl"})
public static void loadImage(ImageView imageView, String url) {
Glide.with(imageView.getContext()).load(url)
.placeholder(R.mipmap.fruit)
.error(R.mipmap.fruit)
.into(imageView);
}
/**
*/
@BindingAdapter({"imageUrl", "placeHolder",error"})
public static void loadImage(ImageView view, String url, Drawable holderDrawable,Drawable errorDrawable) {
Glide.with(imageView.getContext())
.load(url)
.placeholder(holderDrawable)
.error(errorDrawable)
.into(imageView);
}
}
データオブジェクト(Data Objects)
public class ContentBean extends BaseObservable {
//BR , R.java , @Bindable getter BR entry,
// , 。 notifyPropertyChanged(BR.firstName) BR.firstName entry , UI。
private String content; //
public DoubleBindBean(String content) {
this.content = content;
}
@Bindable
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
notifyPropertyChanged(BR.content); // , UI
}
}
- 这样之后只需要操作数据就好了,不用关心UI的变化问题
- ObservableFields : 如果想要省时,或者数据类的字段很少的话,可以使用 ObservableField 以及它的派生 ObservableBoolean、 ObservableByte ObservableChar、ObservableShort、ObservableInt、ObservableLong、ObservableFloat、ObservableDouble、 ObservableParcelable 等。
public class ContentBean {
// public
public final ObservableField username = new ObservableField<>();
}
View with ID
- 如果我们需要在Activity中获取某个View来进行一些操作,那该怎么办呢?
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.userName.setText("content")
}
}