gpt4 book ai didi

以编程方式添加到 LinearLayout 的单个 View 上的 Android 数据绑定(bind)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:04:35 25 4
gpt4 key购买 nike

我能够毫无困难地获得“Activity 范围内”的数据绑定(bind)。但是,当我尝试为特定 View 设置绑定(bind)时,比如我以编程方式添加到 LinearLayout 的膨胀 View ,我尝试过的任何东西都不起作用。

例如,将数据绑定(bind)到 Activity 的 View 是微不足道的。通常在 onCreate() 方法中,只需添加:

MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
User user = new User("Test", "User");
binding.setUser(user);

就是这样! View main_activity.xml 将通过某种魔法“绑定(bind)”到绑定(bind)(这是我的问题)并且变量替换将按预期在 main_activity.xml 中工作。

我查阅了有关 RecyclerView 使用的 Google 文档,并尝试在我的膨胀 View 中使用此方法。我通过为每个 ViewHolder 创建一个 ListItemBinding(我的 .xml 只是称为 list_item.xml 并且这个文件是从 .xml 布局自动生成的)来做到这一点,ListItemBinding 被传递到 ViewHolder 作为引用通过每个 ViewHolder 的构造函数。

现在这当然行不通了,我猜这是因为我的 View 和绑定(bind)之间没有明确的联系,但是,上面的 Activity 和绑定(bind)之间也没有联系,所以为什么那有用吗?

我正在深入研究源代码以查看绑定(bind)如何在 Activity 上工作,我相信这会得到我的答案,但如果其他人可以在我花费多个小时之前插话,我将不胜感激!

我会在这里报告所有的发现,非常感谢

最佳答案

您可以将动态扩展的数据绑定(bind) View 添加到 LinearLayout。您必须以编程方式为数据绑定(bind) View 设置数据。

void addViewToViewGroup(ViewGroup viewGroup, User user) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
MyLayoutBinding binding = MyLayoutBinding.inflate(inflater, viewGroup,true);
binding.setUser(user);
}

如果您附加了一个已知的绑定(bind),您可以改为从那里提取数据。在这里,我假设包含的 ViewGroup 在布局 outer.xml 中并生成了绑定(bind) 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());
}

您可以看到OuterBinding 的用户和MyLayoutBinding 的用户之间没有直接绑定(bind)。这意味着如果您更新它,您将看不到它的反射(reflect)。使用包含的布局,框架确实可以绑定(bind)您必须手动执行的操作。要获取动态更新,您可以这样做:

outer.addOnPropertyChangedCallback(new OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
if (propertyId == BR.user) {
binding.setUser(outer.getUser());
break;
}
}
});

关于以编程方式添加到 LinearLayout 的单个 View 上的 Android 数据绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36634706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com