Просмотр проблемы привязки с макетом <Include> - PullRequest
0 голосов
/ 04 апреля 2020

Я использую Android Studio 3.6.2 и включил функцию привязки вида.

Сложность при получении вида добавлена ​​с использованием , включая тег через привязку.

Панель инструментов. 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)
    }
}

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Вы получаете доступ к включенной привязке макета, а не к панели инструментов, которая находится внутри включенного макета. Я вижу, что вы не дали MaterialToolbar никакого удостоверения личности. Поэтому вам нужно присвоить объект панели инструментов в XML идентификатор и включить его в макет, а затем дать идентификатор, а затем в вашем файле 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
        } 
    }
0 голосов
/ 04 апреля 2020

Оберните вашу панель инструментов. xml с помощью тега layout, имени и идентификатора. Так будет и так:

<?xml version="1.0" encoding="utf-8"?>
<layout  xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

<com.google.android.material.appbar.MaterialToolbar
    style="?toolbarStyle"
    android:id="@+id/my_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:elevation="0dp" />

</layout>

И доступ такой:

val toolbarBinding = binding.toolbar.myToolbar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...