[英]How to implement toolbar with viewbinding in fragment?
我想在片段中實現一個工具欄。 我正在使用綁定來使用來自.xml 的元素。 我在 Kotlin、android 工作室實現。
我已經看到: 在 Android 和許多其他文章、文檔中使用數據綁定時無法顯示工具欄,但是在任何地方我都找不到正確的綁定實現。
工具欄.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/teal_700"
android:elevation="4dp">
</androidx.appcompat.widget.Toolbar>
在片段中。xml
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
片段.kt
在這里,我嘗試了許多不同的實現。 主要問題是當我使用文檔而不是使用 findById 定義工具欄時,我通過 binding.toolbar 定義它,其中misstype出現在它想要工具欄的位置? 不綁定工具欄。
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// doesn't work setConentView and setSupportACtionBar on Red
binding = FragmentItemSecondBinding.setContentView(this, R.layout.fragment_item_second)
setSupportActionBar(binding.toolbar)
binding.setProduct(product);
binding = FragmentItemSecondBinding.inflate(layoutInflater)
return binding.root
}
在文檔和其他視頻中,當我編寫如下代碼時它應該可以工作,但 setSupportActionBar 不存在。
val toolbar = binding.toolbar
setSupportActionBar(toolbar)
有什么區別:
androidx.appcompat.widget.Toolbar 和 android.support.v7.widget.Toolbar
我用第一個。 我的目標是在工具欄中有兩個按鈕,以便有可能返回上一個片段 + onClickSecondButton 進行一些操作。
編輯:致努霍卡
如果你使用<include />
標簽導入外部布局,你也需要設置它自己的綁定。 通過以下方式更改您的代碼;
private lateinit binding: FragmentItemSecondBinding
private lateinit toolbarBinding: ToolbarBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentItemSecondBinding.inflate(inflater, container, false)
toolbarBinding = ToolbarBinding.bind(binding.toolbar)
(requireActivity() as YourActivity).setSupportActionBar(toolbarBinding.toolbar) // in toolbar.xml set an ID to your component e.g. toolbar
binding.setProduct(product);
return binding.root
}
當然,我盡量讓代碼保持簡短。 您應該使您的綁定可以為空並將它們處置在onDestroyView
以避免 memory 泄漏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.