如何在 Android 中使用 ViewBinding 来扩充 ViewStub

Kar*_*rma 1 android kotlin kotlin-android-extensions android-databinding android-viewbinding

由于 Kotlin Synthetics 已被弃用,我们正在迁移到 ViewBinding。

我已经尝试了很多关于 ViewStub、ViewBinding 的谷歌搜索和阅读文档,并且已经为 Fragments 活动实现了 ViewBinding,包括、合并标签,但是我找不到任何使用 ViewBinding 来膨胀 ViewStub 的方法。

 <ViewStub
            android:id="@+id/viewStubLayout"
            tools:layout="@layout/view_demo_layout" />
Run Code Online (Sandbox Code Playgroud)

请忽略宽度和高度属性,它们是作为样式添加的,并已从此代码段中删除。

您能否分享如何使用 ViewBinding 动态地使用另一个 xml 布局来扩展此视图。

即使在 ViewStub.java 文件中,类级别的注释也指出,

执行布局资源膨胀的首选方法如下:

ViewStub 存根 = findViewById(R.id.stub);
查看充气 = stub.inflate(); 

这是否意味着,我必须继续使用 R.layout.xxx_xx 来膨胀视图存根。我不能使用该特定 xml 文件的绑定对象来扩展视图吗?

Som*_*mar 5

我写了关于ViewBinding当它处于测试阶段。除了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 { _, inflateId -> stubBinding = StubBinding.bind(inflateId) }
      return binding.root
  }

  override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
      super.onViewCreated(view, savedInstanceState)
      binding.stub.inflate()
      stubBinding.tvTestMe.text = "Hurray"
   }
}
Run Code Online (Sandbox Code Playgroud)