2

I am using Android Studio 3.6.2 and enabled View Binding feature.

Facing difficulty while getting view added using include tag via binding.

Toolbar.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)
    }
}
Pinakin Kansara
  • 2,273
  • 3
  • 22
  • 35

1 Answers1

7

You are accessing the included layout binding and not the toolbar which is inside the included layout. I can see that you did not give MaterialToolbar any ID. So you need to give toolbar object in XML an ID and include it in layout and then give the an ID and then in your Kotlin file access it like val toolbar = binding.includedLayout.toolbar. Also, You are accessing view before setContentView(binding.root) which is wrong. You need to set the layout before you try to access the views.

Toolbar.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
        } 
    }
Somesh Kumar
  • 8,088
  • 4
  • 33
  • 49