平方X 发表于 2016-5-18 10:27:04

DataBinding

https://realm.io/news/data-binding-android-boyar-mount/

include遇到的问题
在http://m.oschina.net/blog/671244
http://stackoverflow.com/questio ... g-using-include-tag
找到答案,用<data parent="@">,谷歌的之前怎么没见到,是我没仔细吗。
再次解决,说出来你可能不信,问题是这样的。
我有两个include,我都设置了bind:,但另一个include中的我还没写data标签。

平方X 发表于 2016-5-18 11:37:52

设置了databing enable="true",就会引入相关类,否则引用不到。

平方X 发表于 2016-5-18 12:36:15

总结一下
①include可以用bind:传递
②include如果给一个id,会生成一个该id的binding,这个binding又可以引用include中的views

xmlns:bind="http://schemas.android.com/apk/res-auto"
<include
<!--传vm-->
bind:vm="@{vm}"
<!--不可见-->
android:visibility="gone"
layout="@layout/include_message_send_input"
<!--id,用来引用databinding-->
android:id="@+id/input"
/>

平方X 发表于 2016-5-19 09:03:18

用View.VISIBLE时,报
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:Identifiers must have user defined types from the XML file. View is missing it
用visible,gone不行,换了View.VISIBLE也不行。
后来想起来,这个View,是要import的哦
②换了之后,还是不行,
是因为不能直接对include设置,要对里面的view设置,这程直接设置include是不一样的。
还有一点,外面的import对include是不生效的,include里面的好像是独立的。

平方X 发表于 2016-5-26 19:50:35

inflate的databinding
代码中的infalte也是可以bind的。
View view=getActivity().getLayoutInflater().inflate()
Databinding binding=DataBindingUtil.bind(view);
ViewModel viewModel=new ViewModel();
binding.setVm(viewModel);
viewMoel.initData();

我之前一直不可以,是因为忘记了调用setVm,这个总容易忘,要经常注意。

平方X 发表于 2016-6-12 10:15:07

有关BindingAdapter的
1,@BindingAdapter注解,放在Application和Adapter中都没事。
2,
    @BindingAdapter("android:src"),注意参数是imageView,就必须是imageView的,即使是子类也要再申明一个方法
    public static void setImageUrl(ImageView view, String url) {}
3,如果是多个参数的,会被忽略,可能要自定义属性,有时间再看一下。
4,还有注意一下,下面的drawable参数用了@{@drawable}
@BindingAdapter({"bind:imageUrl", "bind:error"})
public static void loadImage(ImageView view, String url, Drawable error) {
   Picasso.with(view.getContext()).load(url).error(error).into(view);
}
<ImageView app:imageUrl=“@{venue.imageUrl}”
app:error=“@{@drawable/venueError}”/>
页: [1]
查看完整版本: DataBinding