我使用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)
}
}
8条答案
按热度按时间ifsvaxew1#
我在启用视图绑定的情况下构建项目时也收到了数据绑定错误。这个question和一些答案可能对任何使用Arctic Fox + Java 11遇到此问题的人有用。升级后,我将app build.gradle条目中的编译选项更改为:
我收到一个错误:package not found(*.databinding)并认为视图绑定没有生成。在尝试了许多补救措施并找到生成的绑定后,我遇到了上述问题。由于我在项目中没有使用任何新语言功能,我将build.gradle中的编译选项更改回:
重新生成项目,绑定全部恢复,没有编译错误。
根据teralser's的回答,“这个问题已经被修复,并在BB canary 8中登陆。它是Java 11特有的”。
对于运行Android 4.0(API级别14)或更高版本并带有Android Gradle Plugin 3.0.0+的设备,按照link添加Java 8编译选项可能会解决您的问题。
xjreopfe2#
其中一个可能会有帮助
2q5ifsrm3#
这样做:- binding = ActivityMainBinding.inflate(layoutInflater)
应该能成功
x0fgdtte4#
只需替换:
其中:
单独传递你的布局会膨胀第二个布局,而不需要任何视图绑定。
ui7jx7zq5#
更简单的解决方法。破坏xml。在id中设置空格或不关闭标签。ViewBinding重新创建破坏的xml并将xml返回到正确的状态。
pes8fvy96#
1.在build.gradle(模块:app):in android braket:
2.在你的Java文件中创建绑定变量
1.在OnCrete()中这样做:
希望这个工作:)
7gcisfzg7#
非常容易解决。创建一个副本的布局,你正在应用的窗口,并使用这个复制的布局从现在开始,解决了。
k75qkfdt8#
使用setContentView(view)或setContentView(binding.root)更改setContentView(R.layout.activity_main)