【问题标题】:How to fix databinding errors in kotlin?如何修复 kotlin 中的数据绑定错误?
【发布时间】:2019-07-12 12:23:54
【问题描述】:

我有一个在线 Kotlin 课程。当我尝试应用数据绑定部分时,我在 .kt 文件中出现了一些红色错误。

ActivityMainBinding 没有导入,所以我手动做了,但问题仍然存在。

这里是 .kt:

package com.example.aboutme

import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.Editable
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.databinding.DataBindingUtil
import com.example.android.aboutme.databinding.ActivityMainBinding



class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        findViewById<Button>(R.id.Done_button).setOnClickListener { addNickname(it) }
    }
    private fun addNickname(view: View) {
        val editText = findViewById<EditText>(R.id.nickname_editText)
        val nicknameText = findViewById<TextView>(R.id.nickname_text)

        nicknameText.text = editText.text
        editText.visibility = View.GONE
        view.visibility = View.GONE
        nicknameText.visibility = View.VISIBLE

        //Hide the keyboard

        val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.hideSoftInputFromWindow(view.windowToken, 0)




    }
}

这是.xml:

<?xml version="1.0" encoding="utf-8"?>
<Layout 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_height="match_parent"
        android:layout_width="match_parent">

         <LinearLayout     android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent" android:paddingStart="@dimen/padding"
              android:paddingEnd="@dimen/padding">

    <TextView
            android:text="@string/hanan_tabak"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" android:id="@+id/name_text"
            android:textAlignment="center" style="@style/name_style"/>
    <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:ems="10"
            android:id="@+id/nickname_editText" style="@style/name_style" android:hint="@string/what_is_your_nickname"/>
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:id="@+id/nickname_text" style="@style/name_style"
            android:layout_gravity="center_horizontal" android:visibility="gone"/>
    <Button
            android:text="@string/done"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:id="@+id/Done_button"
            android:layout_gravity="center_horizontal"
            style="@style/Widget.AppCompat.Button.Colored"/>
    <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content" app:srcCompat="@android:drawable/btn_star_big_on"
            android:id="@+id/star_image" android:contentDescription="@string/yellow_star" android:padding="8dp"/>
    <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        <TextView
                android:text="@string/bio"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" android:id="@+id/scroll_text" style="@style/name_style"
        android:lineSpacingMultiplier="1.2"/>
    </ScrollView>
         </LinearLayout>
</Layout>

这里是 gradle.app:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.0"
    defaultConfig {
        applicationId "com.example.aboutme"
        minSdkVersion 19
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding { enabled = true}
}

dependencies {
    kapt "com.android.databinding:compiler:3.4.1"

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.core:core-ktx:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

这里是 gradle.project:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext.kotlin_version = '1.3.31'
    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()

    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

我面临的错误是: 1- 在代码行中:

导入 com.example.android.aboutme.databinding.ActivityMainBinding :

(android)为红色字体,错误为(Unresolved reference:android)

2- 在这行代码中: 私有lateinit var绑定:ActivityMainBinding:

(ActivityMainBinding) 为红色字体,错误为(Unresolved reference AcitivityMainBinding)

3- 在这行代码中: binding = DataBindingUtil.setContentView(this, R.layout.activity_main):

setContentView 下有一条红色下划线,错误为 (Not enough information to infer variable T)

【问题讨论】:

  • 您忘记了最重要的部分:错误是什么
  • 编辑了帖子。
  • 那么,你有一个名为com.example.android.aboutme.databinding.ActivityMainBinding 的类吗?您发布的唯一课程在包com.example.aboutme 中。我的猜测是其他的 ActivityMainBinding 也是一样的。
  • 你的意思是导入?那该怎么办呢?
  • 您发布的代码使用类com.example.android.aboutme.databinding.ActivityMainBinding。您的 IDE 告诉您该类不存在。那么,它存在吗?如果没有,你为什么要使用它?

标签: kotlin compiler-errors


【解决方案1】:

我遇到了同样的错误,结果发现这是我的导入错误。 但是我可以看到您的问题并非如此。 虽然当我在寻找答案时,我遇到了一个与其他人提出的问题相同的问题。他显然通过清理和重建项目解决了这个问题。

为此,请转至Build -&gt; Clean Project,然后转至Build -&gt; Rebuild Project

希望一切顺利!

Here's the link如果你想检查另一个问题

【讨论】:

  • 我试过了,但它在这个应用程序中不起作用......但有趣的是,数据绑定在另一个应用程序中运行良好:)
【解决方案2】:

我在 Android Studio 中通过文件菜单中的无效缓存和重启选项解决了这个问题

【讨论】:

    【解决方案3】:

    把你的布局包起来

    <layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <!-- YOUR LAYOUT HERE -->
    </layout>
    

    【讨论】:

      【解决方案4】:

      如果仍然无法正常工作。 您可以将“/build/generate/xxx”中的视图绑定文件设置为源目录。 这对我有用。

      【讨论】:

        猜你喜欢
        • 2019-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-14
        • 1970-01-01
        相关资源
        最近更新 更多