[英]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.