导入kotlinx.android.synthetic.main.activity_main无法正常工作

时间:2018-09-11 08:13:05

标签: android android-studio import kotlin

导入kotlinx变灰了

enter image description here

我想我几乎尝试了所有事情。重新安装Android Studio,Invalide Cache,新项目相同的问题。

我只是找不到解决方案

12 个答案:

答案 0 :(得分:4)

检查“ build.gradle(:app)”文件,

plugins {
id 'com.android.application'
id 'kotlin-android'}

如果缺少kotlin扩展名,请添加“ kotlin-android-extensions”,如下所示,然后单击“立即同步”

plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-android-extensions' }

答案 1 :(得分:3)

以下是分步回答:

  • 在 Android Studio 的右侧,点击 Gradle
  • 右键点击应用程序,然后点击 Open Gradle Config
  • plugins 部分打开新的源代码,然后添加:

id 'kotlin-android-extensions'

  • 点按 sync

结果:现在您可以导入kotlinx.android.synthetic.main.activity_main.*

答案 2 :(得分:2)

您可以尝试

  • 文件|使缓存无效/重新启动
  • 删除.idea文件夹
  • 清洁
  • 重新导入项目

OR 只需删除apply plugin: 'kotlin-android-extensions',同步gradle插件,然后我再次添加即可。

答案 3 :(得分:1)

简单的朋友,您忘记了星号。

    import kotlinx.android.synthetic.main.activity_main.*

这只是发生在我身上。

答案 4 :(得分:1)

build.gradle (:app) 中,添加:

    buildFeatures {
        viewBinding true
    }

MainActivity中:

private lateinit var binding: ActivityMainBinding

修改onCreate

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        setListeners()
    }

设置监听器:

    /**
     * Attaches listeners to all the views.
     */
    private fun setListeners() {
        val clickableViews: List<View> =
            listOf(
                binding.view1,
                binding.view2,
                // ...
            )
        for (item in clickableViews) {
            item.setOnClickListener { ... }
        }
    }

答案 5 :(得分:0)

module gradle

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

dependencies {
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

project gradle

buildscript{
ext.kotlin_version = '1.3.11'
}
 dependencies {
  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}

答案 6 :(得分:0)

这对我来说是固定的:

  1. 将其放入您的app.iml

<facet type="kotlin-language" name="Kotlin"> <configuration version="3" platform="JVM 1.8" allPlatforms="JVM [1.8]" useProjectSettings="false"> <compilerSettings /> <compilerArguments> <option name="jvmTarget" value="1.8" /> <option name="pluginOptions"> <array> <option value="plugin:org.jetbrains.kotlin.android:enabled=true" /> <option value="plugin:org.jetbrains.kotlin.android:defaultCacheImplementation=hashMap" /> </array> </option> </compilerArguments> </configuration> </facet>

  1. 进行gradle同步

答案 7 :(得分:0)

对我来说,只是将apply plugin: 'kotlin-android-extensions'添加到应用程序的build.gradle中,按同步gradle文件,我就可以得到合成

答案 8 :(得分:0)

id 'kotlin-android-extensions'
id 'kotlin-android'

删除插件,并向其中添加了两个。 id'kotlin-android-extensions' id'kotlin-android'

应添加。重新启动项目。

所以我发现问题出在gradle插件中,然后您需要重新启动并重建项目。

答案 9 :(得分:0)

合成技术现已从Google弃用。尝试避免使用它们,因为这可能会导致空指针异常和应用程序上的意外行为。

了解更多信息:

Migrate from Kotlin synthetics to Jetpack view binding来自官方开发者网站。

答案 10 :(得分:0)

希望这有帮助...可能与从布局中获取视图的新方法有关

科特林:

  1. 打开 gradle app.module 并在里面添加这一行

    安卓{

     android{viewBinding.enabled = true
     ...
    
     }
    

(然后同步)

  1. 转到 MainActivity.kt 并执行以下操作:

覆盖 fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)

val binding = ActivityMainBinding.inflate(layoutInflater) // 2.1

setContentView(binding.root) // 2.2 而不是 (R.layout.activity_main)

现在视图是这样调用的

binding.btn1.setOnClickListener{...}

binding.txtviewTitle.text = "Welcome to the jungle" // or any R.string

注意:将 gradle module.app 与该行同步后,您会发现任何具有相同名称+绑定的活动

看2.1参考

答案 11 :(得分:0)

Kotlin Android 扩展已折旧。迁移到 Jetpack 视图绑定。见下文: https://developer.android.com/topic/libraries/view-binding/migration