如何解决如何在 Android 中使用 ViewBinding 来扩充 ViewStub
由于 Kotlin Synthetics 已被弃用,我们正在迁移到 ViewBinding。
我尝试了很多关于 ViewStub、ViewBinding 的谷歌搜索和阅读文档,并为 Fragments 活动实现了 ViewBinding,包括、合并标签,但是我找不到任何使用 ViewBinding 来扩充 ViewStub 的方法。
<ViewStub
android:id="@+id/viewStubLayout"
tools:layout="@layout/view_demo_layout" />
请忽略宽度和高度属性,它们是作为样式添加的,并已从该代码段中删除。
能否请您分享如何使用 ViewBinding 动态地使用另一个 xml 布局来扩展此视图。
即使在 ViewStub.java 文件中,类级别的注释也指出,
执行布局资源膨胀的首选方法是 以下内容:
ViewStub stub = findViewById(R.id.stub); View inflated = stub.inflate();
这是否意味着,我必须继续使用 R.layout.xxx_xx 来膨胀视图存根。我不能使用该特定 xml 文件的绑定对象来扩展视图吗?
解决方法
I wrote 关于 ViewBinding
处于 Beta 版时。我涵盖了除 ViewStub
之外的所有情况。 ViewStub
案例与我链接文章中的 <Include>
案例非常相似。
您需要做的是调用 bind()
布局的 ViewStub
函数并传递您添加 ViewStub
的根。记得在 bind()
中调用 setOnInflateListener
。
class MainFragment : Fragment() {
private var binding: FragmentMainBinding by autoCleared()
private var stubBinding: StubBinding by autoCleared()
override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {
binding = FragmentMainBinding.inflate(inflater,container,false)
binding.stub.setOnInflateListener { _,_ -> stubBinding = StubBinding.bind(binding.root) }
return binding.root
}
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
binding.stub.inflate()
stubBinding.tvTestMe.text = "Hurray"
}
}
,
@Somesh 的回答中的一个小更正
传递给 StubBinding 的膨胀视图是错误的。我们实际上应该传递从 onInflate
侦听器接收到的视图
class MainFragment : Fragment() {
private var binding: FragmentMainBinding by autoCleared()
private var stubBinding: StubBinding by autoCleared()
override fun onCreateView(inflater: LayoutInflater,inflated -> stubBinding = StubBinding.bind(inflated) }
return binding.root
}
override fun onViewCreated(view: View,savedInstanceState)
binding.stub.inflate()
stubBinding.tvTestMe.text = "Hurray"
}
}
,
它可以通过 2 行简单的代码来完成
binding.viewStub.layoutResource = R.layout.layoutId
binding.viewStub.inflate()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。