viewBinding не работает с ошибкой (Android studio 4)

Я делаю приложение для Android с помощью kotlin от Android Studio 4 (4.11).

findViewById устарел в Androd Studio 4, тогда я использую viewBinding. https://developer.android.com/topic/libraries/view-binding

Но viewBinding не работает с ошибкой.

(path)/MainActivity.kt: (6, 31): Unresolved reference: ActivityMainBinding

Может ли кто-нибудь сказать мне причину ошибки или мою ошибку?

код ниже.

уровень сборки:

  android {
  ...
// <-- added
    buildFeatures {
        viewBinding = true
    }
// -->
  }

res/layout/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/viewText" // added.
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
package com.example.myapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

private lateinit var binding: ActivityMainBinding // added. <== error (6:31)

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

// <-- added.
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        binding.textView.text = "Test view binding."
// -->

        setContentView(R.layout.activity_main)
    }
}

person satossy    schedule 08.12.2020    source источник
comment
Почему вы пытаетесь добавить поле привязки вне действия?   -  person EpicPandaForce    schedule 19.03.2021


Ответы (4)


Один из них может помочь

  • Перестроить проект (Сборка->Перестроить проект)
  • File -> Invalidate Chaches -> Invalidate and Restart
person Farees Hussain    schedule 08.12.2020
comment
Да всегда это. View Binding кажется особенно странным, и если вы что-то переименуете, вам определенно придется перестраивать - person cactustictacs; 08.12.2020
comment
попробуйте вместо этого использовать привязку данных. лично мне нравится - person Farees Hussain; 08.12.2020

Сделайте это:-binding = ActivityMainBinding.inflate(layoutInflater)

    val view = binding.root
    
    setContentView(view)  or setcontentview(binding.root)

    binding.textView.text = "Test view binding."

он должен работать.

person Vishwanath Pandey    schedule 19.03.2021

Очень легко решить. Создайте копию макета, который вы применяете к окну, и используйте этот скопированный макет с этого момента, решено.

person Makrov H    schedule 24.03.2021

измените setContentView(R.layout.activity_main) на setContentView(view) или setContentView(binding.root)

person nesnes    schedule 15.06.2021