【问题标题】:viewBinding is not working with error (Android studio 4)viewBinding 无法正常工作并出现错误(Android Studio 4)
【发布时间】:2020-12-08 05:19:02
【问题描述】:

我使用 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

谁能告诉我错误的原因或我的错误?

代码如下。

构建等级:

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

【问题讨论】:

  • 为什么要在activity之外添加绑定字段

标签: android-studio kotlin android-studio-4.1


【解决方案1】:

在构建启用视图绑定的项目时,我也收到了数据绑定错误。这个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

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

compileOptions {
     sourceCompatibility JavaVersion.VERSION_1_8
     targetCompatibility JavaVersion.VERSION_1_8
}

重建项目,绑定全部恢复,没有编译错误。

根据teralser's 的回答,“此问题已在 BB 金丝雀 8 中修复并登陆。它特定于 Java 11”。

对于运行 Android 4.0(API 级别 14)或更高版本并使用 Android Gradle 插件 3.0.0+ 的设备,按照 link 添加 Java 8 编译选项可能会解决您的问题。

【讨论】:

    【解决方案2】:

    其中一个可能会有所帮助

    • 重建项目(Build->重建项目)
    • 文件 -> 使 Chaches 无效 -> 无效并重新启动

    【讨论】:

    • 是的,总是这样。 View Binding 似乎特别麻烦,如果你重命名任何东西,你肯定必须重建
    • 尝试使用数据绑定。我个人喜欢它
    【解决方案3】:

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

        val view = binding.root
        
        setContentView(view)  or setcontentview(binding.root)
    
        binding.textView.text = "Test view binding."
    

    它应该可以工作。

    【讨论】:

      【解决方案4】:

      只需替换:

      setContentView(R.layout.activity_main)
      

      与:

      setContentView(binding.root)
      

      单独传递您的布局将在没有任何视图绑定的情况下膨胀第二个布局。

      【讨论】:

        【解决方案5】:

        很容易解决。创建您在窗口上应用的布局的副本,并从现在开始使用此复制的布局,解决。

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-02-08
            • 2016-06-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-01-09
            相关资源
            最近更新 更多