【问题标题】:View Binding Issue with <Include> layout使用 <Include> 布局查看绑定问题
【发布时间】:2020-04-04 11:26:52
【问题描述】:

我使用的是 Android Studio 3.6.2 并启用了视图绑定功能。

在通过绑定使用 include 标签添加视图时遇到困难。

工具栏.xml

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.appbar.MaterialToolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    style="?toolbarStyle"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:elevation="0dp" />

MainActivity.xml

<?xml version="1.0" encoding="utf-8"?>

<include
    android:id="@+id/toolbar"
    layout="@layout/toolbar"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<androidx.fragment.app.FragmentContainerView
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:defaultNavHost="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/toolbar"
    app:navGraph="@navigation/merchant_navigation_graph" />

MainActivity.kt

    class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        setTheme(R.style.AvailsTheme_DayNight)
        super.onCreate(savedInstanceState)
        val binding = ActivityMainBinding.inflate(layoutInflater)

        val toolbarBinding = binding.toolbar

        setContentView(binding.root)
    }
}

【问题讨论】:

标签: android android-jetpack android-viewbinding


【解决方案1】:

您正在访问包含的布局绑定,而不是包含的布局内的工具栏。我可以看到你没有给MaterialToolbar任何ID。因此,您需要为 XML 中的工具栏对象提供一个 ID 并将其包含在布局中,然后提供一个 ID,然后在您的 Kotlin 文件中像 val toolbar = binding.includedLayout.toolbar 一样访问它。此外,您正在访问setContentView(binding.root) 之前的视图,这是错误的。您需要在尝试访问视图之前设置布局。

工具栏.xml

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.appbar.MaterialToolbar 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/toolbar"
    style="?toolbarStyle" 
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:elevation="0dp" />

MainActivity.xml

 <include
        android:id="@+id/includedLayout"
        layout="@layout/toolbar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

MainActivity.kt

class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            setTheme(R.style.AvailsTheme_DayNight)
            super.onCreate(savedInstanceState)
            val binding = ActivityMainBinding.inflate(layoutInflater)
            setContentView(binding.root)
            val toolbar = binding.includedLayout.toolbar
        } 
    }

【讨论】:

  • 我在做 binding.toolbar 时得到了 toolBarBinding 对象。那没有给出工具栏实例。
  • 哦,在你澄清之后我才看到真正的问题。检查更新的答案,它肯定可以工作。
  • @Pinakin 这行得通吗?如果答案不起作用,请不要忘记标记答案或提供反馈。
  • 如果我必须在片段中访问这个怎么办?
猜你喜欢
  • 2014-03-23
  • 2020-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 2017-04-17
相关资源
最近更新 更多