viewBinding无法正常工作,出现错误(Android Studio 4)

nwwlzxa7  于 2023-04-21  发布在  Android
关注(0)|答案(8)|浏览(415)

我使用Android Studio 4(4.11)的Kotlin开发了Android应用程序。
findViewById在Androd Studio 4中被弃用,那么我使用viewBinding.https://developer.android.com/topic/libraries/view-binding
但是viewBinding不工作,有错误。

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

有人能告诉我错误的原因吗?
代码在下面。
build.grade:

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)
    }
}
ifsvaxew

ifsvaxew1#

我在启用视图绑定的情况下构建项目时也收到了数据绑定错误。这个question和一些答案可能对任何使用Arctic Fox + Java 11遇到此问题的人有用。升级后,我将app build.gradle条目中的编译选项更改为:

sourceCompatibility JavaVersion.VERSION_11 
    targetCompatibility JavaVersion.VERSION_11
//Required if using new Java 11 language features in your project

我收到一个错误:package not found(*.databinding)并认为视图绑定没有生成。在尝试了许多补救措施并找到生成的绑定后,我遇到了上述问题。由于我在项目中没有使用任何新语言功能,我将build.gradle中的编译选项更改回:

compileOptions {
     sourceCompatibility JavaVersion.VERSION_1_8
     targetCompatibility JavaVersion.VERSION_1_8
}

重新生成项目,绑定全部恢复,没有编译错误。
根据teralser's的回答,“这个问题已经被修复,并在BB canary 8中登陆。它是Java 11特有的”。
对于运行Android 4.0(API级别14)或更高版本并带有Android Gradle Plugin 3.0.0+的设备,按照link添加Java 8编译选项可能会解决您的问题。

xjreopfe

xjreopfe2#

其中一个可能会有帮助

  • 重建项目(Build-〉Rebuild Project)
  • 文件-〉无效化Chaches -〉无效化并重新启动
2q5ifsrm

2q5ifsrm3#

这样做:- binding = ActivityMainBinding.inflate(layoutInflater)

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

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

应该能成功

x0fgdtte

x0fgdtte4#

只需替换:

setContentView(R.layout.activity_main)

其中:

setContentView(binding.root)

单独传递你的布局会膨胀第二个布局,而不需要任何视图绑定。

ui7jx7zq

ui7jx7zq5#

更简单的解决方法。破坏xml。在id中设置空格或不关闭标签。ViewBinding重新创建破坏的xml并将xml返回到正确的状态。

pes8fvy9

pes8fvy96#

1.在build.gradle(模块:app):in android braket:

buildFeatures {
    viewBinding = true
}

2.在你的Java文件中创建绑定变量

ActivityMainBinding binding;

1.在OnCrete()中这样做:

binding = ActivityMainBinding.inflate(getLayoutInflater());
         setContentView(binding.getRoot());

希望这个工作:)

7gcisfzg

7gcisfzg7#

非常容易解决。创建一个副本的布局,你正在应用的窗口,并使用这个复制的布局从现在开始,解决了。

k75qkfdt

k75qkfdt8#

使用setContentView(view)或setContentView(binding.root)更改setContentView(R.layout.activity_main)

相关问题