平方X

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5617|回复: 5

[Android] DataBinding

[复制链接]

414

主题

709

帖子

3657

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3657
QQ
发表于 2016-5-18 10:27:04 | 显示全部楼层 |阅读模式
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~
回复

使用道具 举报

414

主题

709

帖子

3657

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3657
QQ
 楼主| 发表于 2016-5-18 11:37:52 | 显示全部楼层
设置了databing enable="true",就会引入相关类,否则引用不到。
我是平方X~
回复 支持 反对

使用道具 举报

414

主题

709

帖子

3657

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3657
QQ
 楼主| 发表于 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~
回复 支持 反对

使用道具 举报

414

主题

709

帖子

3657

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3657
QQ
 楼主| 发表于 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~
回复 支持 反对

使用道具 举报

414

主题

709

帖子

3657

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3657
QQ
 楼主| 发表于 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~
回复 支持 反对

使用道具 举报

414

主题

709

帖子

3657

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3657
QQ
 楼主| 发表于 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}”/>
我是平方X~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|平方X ( 冀ICP备14018164号 )

GMT+8, 2024-11-23 20:29 , Processed in 0.094935 second(s), 22 queries .

技术支持:Powered by Discuz!X3.4  © 2001-2013 Comsenz Inc.

版权所有:Copyright © 2014-2018 平方X www.pingfangx.com All rights reserved.

快速回复 返回顶部 返回列表