ViewBinding 在布局加载后操纵视图

6

我有一个实例,以前我把我的View传递到一个新的方法中以便操纵一些东西。下面我提供一个示例。基本上,我正在使用一个RecyclerView,在recylerview创建view时进行inflating

现在我有了被填充的View对象,现在我只需要将其传递给我的方法进行操作。

manipulateView(view) manipulateView设定view子项的颜色和属性。

那个以前可以工作并且一切都很好,但现在我要使用ViewBinding

现在我有了一个ViewStub,需要inflate我的customView,如下所示是代码:

ViewDataBinding viewDataBinding = DataBindingUtil.inflate(layoutInflater, getLayoutResource(), viewGroup, false);
ViewStub viewStub = (ViewStub) viewDataBinding.getRoot().findViewById(R.id.stub);

然后我在这里为 viewStub 设置了布局。

viewStub.setLayoutResource(getLayoutResource());

现在,setLayoutResource需要一个带有layoutidint值,我的问题是如何在getLayoutResource()上调用manipulateView,我应该只是传递viewStub,然后调用viewStub.getRootView()Manipulate那个视图吗?
如果能够直接manipulateViewDataBinding对象本身,那将是最好的,我应该只是操纵ViewDataBinding::getRoot吗?
1个回答

3
通过调用 layoutInflater.inflate(...) 膨胀的视图与您从viewDataBinding.getRoot()获得的视图相同。根据文档,root "返回最外层视图"
因此,如果您想要操作它,只需调用 manipulateView(viewDataBinding.root) 即可。

1
这会显示更改到视图上吗?就像它是相同的视图,不会创建新的视图对象吗? - SamHoque
正确。View myView = layoutInflater.inflate(...)View myView = binding.getRoot() 返回相同的东西。 :) 所以你只需要改变那一行,其余的代码应该是类似的。 - AdamMc331
另外值得注意的是,在数据绑定中,您不需要使用findViewById,您应该能够使用binding.myViewId并获取对视图的引用。这就是数据绑定的美妙之处之一。更多信息请参见:https://medium.com/androiddevelopers/no-more-findviewbyid-457457644885 - AdamMc331
嗯,这很奇怪,我似乎无法执行 binding.hello.setText,它说“hello”未解决,当然我已经用我的 id 替换了 hello - SamHoque
1
然而,这个答案是正确的,所以我已经标记它为正确 :) - SamHoque
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接