簡體   English   中英

如何在 Android 中使用 ViewBinding 為 ViewStub 充氣

[英]How to inflate a ViewStub using ViewBinding in Android

由於 Kotlin Synthetics 已被棄用,我們正在遷移到 ViewBinding。

我已經嘗試了很多關於 ViewStub、ViewBinding 的谷歌搜索和閱讀文檔,並為 Fragments 活動、包含、合並標簽實現了 ViewBinding,但是我找不到任何方法來使用 ViewBinding 膨脹 ViewStub。

 <ViewStub
            android:id="@+id/viewStubLayout"
            tools:layout="@layout/view_demo_layout" />

請忽略寬度和高度屬性,因為它們是作為樣式添加的,並已從該片段中刪除。

您能否分享如何使用 ViewBinding 動態地使用另一個 xml 布局來擴展此視圖。

即使在 ViewStub.java 文件中,class 級別的注釋 state 那,

執行布局資源膨脹的首選方法如下:

  ViewStub 存根 = findViewById(R.id.stub); 查看膨脹 = stub.inflate();

這是否意味着,我必須繼續使用 R.layout.xxx_xx 來膨脹視圖。 我不能對特定的 xml 文件使用綁定 object 來擴展視圖嗎?

我在 Beta 版中寫過關於ViewBinding的文章。 我涵蓋了除ViewStub之外的所有情況。 ViewStub案例與我鏈接文章中的<Include>案例非常相似。 您需要做的是調用ViewStub布局的bind() function 並傳遞您添加ViewStub的根。 記得在setOnInflateListener中調用bind()

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"
   }
}

@Somesh 的回答中的一個小更正

傳遞給 StubBinding 的膨脹視圖是錯誤的。 我們實際上應該傳遞從onInflate監聽器收到的視圖

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 { _, inflated -> stubBinding = StubBinding.bind(inflated) }
      return binding.root
  }

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

可以通過 2 條簡單的線路完成

binding.viewStub.layoutResource = R.layout.layoutId
binding.viewStub.inflate()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM