databinding学习第四天
BindingAdapter
BindingAdapter
官方说绑定适配器提供的自定义方法
- BindingAdapters.java
public class BindingAdapters {
@BindingAdapter({"app:imageUrl", "app:placeHolder", "app:error"})
public static void loadImage(ImageView imageView, String url,Drawable placeholder,Drawable error) {
Glide.with(imageView.getContext())
.load(url)
.placeholder(placeholder)
.error(error)
.into(imageView);
}
}
- activity_other.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="user"
type="com.hwp.databindingdemo.ui.OtherActivity.User" />
<import type="android.view.View.OnClickListener"/>
<variable
name="myClick"
type="OnClickListener" />
<variable
name="error"
type="android.graphics.drawable.Drawable" />
<variable
name="placeholder"
type="android.graphics.drawable.Drawable" />
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.OtherActivity">
<ImageView
android:onClick="@{myClick}"
app:error="@{error}"
app:placeHolder="@{placeholder}"
app:imageUrl="@{user.imgUrl}"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<!-- 此处还可以做如下引用,但是只支持drawable,不支持mipmap,不知道是不是官方的bug,还是我自己没有注意到
app:error="@{@drawable/pic_error}"
app:placeHolder="@{@drawable/pic_error}"
/>-->
</LinearLayout>
</layout>
- OtherActivity.java
public class OtherActivity extends AppCompatActivity implements View.OnClickListener {
private ActivityOtherBinding otherBinding;
private User user;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
otherBinding= DataBindingUtil.setContentView(this,R.layout.activity_other);
otherBinding.setError(getDrawable(R.mipmap.pic_error));
otherBinding.setPlaceholder(getDrawable(R.mipmap.pic_loading));
user=new User();
otherBinding.setUser(user);
user.imgUrl.set("https://up.enterdesk.com/edpic_360_360/e8/08/6e/e8086e39d5924405f75d42cdbb9dd34b.jpg");
otherBinding.setMyClick(this);
}
@Override
public void onClick(View view) {
user.imgUrl.set("https://c-ssl.duitang.com/uploads/item/201802/27/20180227094809_JiL5V.thumb.700_0.jpeg");
otherBinding.setUser(user);
}
public class User extends BaseObservable{
public final ObservableField<String> imgUrl=new ObservableField<>();
}
}
图示:
![](https://img.haomeiwen.com/i1376353/c1fb33bf0039a249.png)
![](https://img.haomeiwen.com/i1376353/be851b3dd799f941.png)
网友评论