【问题标题】:ViewBinding manipulate view after inflatingViewBinding 在充气后操纵视图
【发布时间】:2019-05-27 21:43:05
【问题描述】:

我有一个实例,我曾经将我的View 传递给一个新方法来操作一些事情。在这里,我将提供一个例子。所以基本上我使用的是RecyclerView,我是inflatingrecylerview创建view时的视图

所以现在我有了膨胀的View 对象,现在我只需将它传递给我的方法来操作它。

manipulateView(view) manipulateView 设置view children 的颜色和属性

这曾经可以正常工作。但现在我要转到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 期望int 值与layoutid 现在我的问题是如何在getLayoutResource() 上调用manipulateView 我应该只通过viewStub 然后调用@ 987654344@ 和Manipulate 那个观点?

如果我能够manipulate ViewDataBinding 对象它自己,那将是最好的,我应该只操纵ViewDataBinding::getRoot 吗?

【问题讨论】:

    标签: java android data-binding


    【解决方案1】:

    通过调用layoutInflater.inflate(...) 获得的视图与您从viewDataBinding.getRoot() 获得的视图相同。从文档中,root "returns the outermost view"

    所以,如果这就是你想要操纵的,我会打电话给manipulateView(viewDataBinding.root)

    【讨论】:

    • 这会在视图上显示更改吗?就像它是同一个视图并且不创建新的视图对象?
    • 正确。 View myView = layoutInflater.inflate(...)View myView = binding.getRoot() 返回相同的东西。 :) 所以你只需要改变那一行,你的代码的其余部分应该是相似的。
    • 另外,值得注意的是,在数据绑定中您不需要findViewById,您应该能够执行binding.myViewId 并获得对视图的引用。这是数据绑定的优点之一。更多信息在这里:medium.com/androiddevelopers/no-more-findviewbyid-457457644885
    • 我明白了,我的视图实际上没有 id,它们有标签,所以我应该只做 view::findViewByTag 吗?
    • 然而,这个答案是正确的,所以我将其标记为正确:)
    猜你喜欢
    • 2021-06-16
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多