Aut*_*M8R 6 xml data-binding layout android android-inflate
我可以毫无困难地获得"活动范围"的数据绑定工作.但是,当我尝试为特定视图设置绑定时,假设我以编程方式添加到LinearLayout的膨胀视图,我尝试过的任何工作都没有.
例如,将数据绑定到Activity的视图是微不足道的.通常在onCreate()方法中,只需要添加:
MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
User user = new User("Test", "User");
binding.setUser(user);
Run Code Online (Sandbox Code Playgroud)
而已!视图main_activity.xml将通过一些魔法"绑定"到绑定(这是我的问题),变量替换将在main_activity.xml中按预期工作.
我查阅了Google有关RecyclerView使用的文档,并尝试在我的虚增视图中使用此方法.我这样做是通过创建一个ListItemBinding(我的.XML就被称为list_item.xml这个文件是自动生成的关闭的.xml布局的)每个ViewHolder的ListItemBinding被传递到ViewHolder举行通过参考每个ViewHolder的构造函数.
现在当然,这并不工作,我猜测,这样做的原因是,有我的视图和约束力,但是,有上述活动,并绑定要么之间不系领带之间没有明确的领带,那么,为什么不工作?
我正在深入研究源代码以了解绑定如何对活动起作用,我确信这将有我的答案,但如果有其他人可以在我花费多个小时之前插入,我会很感激开始!
我将在此报告所有调查结果,非常感谢
Geo*_*unt 12
您可以将动态膨胀的数据绑定视图添加到LinearLayout.您必须以编程方式设置数据绑定视图的数据.
void addViewToViewGroup(ViewGroup viewGroup, User user) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
MyLayoutBinding binding = MyLayoutBinding.inflate(inflater, viewGroup,true);
binding.setUser(user);
}
Run Code Online (Sandbox Code Playgroud)
如果您附加了已知的绑定,则可以从那里提取数据.在这里,我假设包含ViewGroup的是布局outer.xml
并生成绑定OuterBinding
.
void addViewToViewGroup(ViewGroup viewGroup) {
OuterBinding outer = DataBindingUtil.findBinding(viewGroup);
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
MyLayoutBinding binding = MyLayoutBinding.inflate(inflater, viewGroup, true);
binding.setUser(outer.getUser());
}
Run Code Online (Sandbox Code Playgroud)
您可以看到OuterBinding
用户和用户之间没有直接绑定MyLayoutBinding
.这意味着如果您更新它,您将看不到它反映出来.使用包含的布局,框架确实可以绑定您必须手动执行的操作.要获得动态更新,您可以这样做:
outer.addOnPropertyChangedCallback(new OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
if (propertyId == BR.user) {
binding.setUser(outer.getUser());
break;
}
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3224 次 |
最近记录: |