【问题标题】:I cant set the toolbar from my fragment activity我无法从我的片段活动中设置工具栏
【发布时间】:2023-04-10 16:04:01
【问题描述】:

这是我的代码

HomeFragment.kt

    package com.example.mywallpaper
    
    import android.os.Bundle
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGroup
    import androidx.appcompat.app.AppCompatActivity
    import androidx.fragment.app.Fragment


    class HomeFragment : Fragment() {
    
    
    
        override fun onCreateView(
            inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            // Inflate the layout for this fragment
            return inflater.inflate(R.layout.fragment_home, container, false)
    
        }



        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
        //initialize action bar
            (activity as AppCompatActivity).setSupportActionBar(main_toolbar)


            val actionBar=(activity as AppCompatActivity).supportActionBar
            actionBar!!.setTitle("Fire Wallpapers")

        }

}

我目前正在观看有关如何制作壁纸应用程序的教程,即使我所做的一切都一样,但我有一个错误 (activity as AppCompatActivity).setSupportActionBar(main_toolbar) 主工具栏部分它表示未解析的引用

<com.google.android.material.appbar.AppBarLayout
       android:id="@+id/main_app_bar"
       app:layout_constrainTop_toTopOf="parent"
       app:layout_constraintEnd_toEndOf="parent"
       app:layout_constraintStart_toStartOf="parent"
       android:layout_width="0dp"
       android:layout_height="wrap_content">
       <androidx.appcompat.widget.Toolbar
           android:id="@+id/main_toolbar"
           android:background="@color/white"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"/>
   </com.google.android.material.appbar.AppBarLayout>

【问题讨论】:

    标签: android android-fragments android-activity android-jetpack


    【解决方案1】:

    当从 Kotlin/Java 代码引用 XML 资源(例如您的工具栏)时,您需要使用正确的名称:main_toolbar 单独不存在。例如,在您的情况下,正确的参考是:

    ...setSupportActionBar(R.id.main_toolbar)
    

    在此处查看有关使用资源的更多信息: https://developer.android.com/guide/topics/resources/providing-resources#Accessing

    在应用栏以及开发者文档中都有很好的指南: https://developer.android.com/training/appbar

    【讨论】:

    • 它说类型不匹配它不起作用。在我观看的视频中,他做了我所做的事情,并且工作视频是从 2020 年开始的。
    【解决方案2】:

    在 Kotlin 中从 Fragment 访问 ActionBar

    if(activity is AppCompatActivity){
            (activity as AppCompatActivity).setSupportActionBar(main_toolbar)
        }
    

    要从 Fragmententer code here 设置 ActionBar 标题,您可以这样做

    (activity as AppCompatActivity).supportActionBar?.title = "Fire Wallpapers"
    

    (activity as AppCompatActivity).supportActionBar?.setTitle("Fire Wallpapers")
    

    【讨论】:

      【解决方案3】:

      Google 建议不要使用 setSupportActionBar(),强烈建议使用 Toolbar API。

      <androidx.appcompat.widget.Toolbar
      android:id="@+id/myToolbar"
      ... />
      
      class ExampleFragment : Fragment() {
      ...
      
      override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
          ...
      
          viewBinding.myToolbar.inflateMenu(R.menu.sample_menu)
      }
      

      }

      详细解释请访问链接working with the appBar in Fragments

      【讨论】:

        猜你喜欢
        • 2016-03-02
        • 1970-01-01
        • 2016-11-20
        • 2022-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        相关资源
        最近更新 更多