簡體   English   中英

如何在片段中實現帶有視圖綁定的工具欄?

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

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