【问题标题】:Difference between Kotlin-android and kotlin-android-extensions in android studio 3.0android studio 3.0 中 Kotlin-android 和 kotlin-android-extensions 的区别
【发布时间】:2017-12-16 20:16:49
【问题描述】:

在 android studio 3.0 中,当我们为 kotlin 创建一个新项目时,会在 app build gradle 文件中自动添加两个插件,如下所示:

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

为什么我们需要在android studio中应用android-extensions插件和kotlin-android插件?这背后有什么不同或任何原因吗?

【问题讨论】:

    标签: android kotlin-android-extensions android-studio-3.0


    【解决方案1】:

    每个 Android 开发人员都知道 findViewById()。但是 Kotlin 不再需要 findViewById。

    这是怎么发生的?这是因为 Kotlin Android 扩展。

    如何使用 Kotlin 访问 TextView:

    override fun onCreate(savedInstanceState: Bundle?) {  
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        textView.setText("Hello World");   // No need(findViewById) to create a reference variable explicitly
    }
    

    但是这一切是如何运作的呢?这就是“Kotlin Android 扩展”的魔力。

    您可能已经注意到 Gradle 文件中的以下插件和我们的活动类中的导入语句。

    apply plugin: 'kotlin-android-extensions'
    
    import statement in Activity:
    
    import kotlinx.android.synthetic.main.activity_login.*
    

    由于这个插件和 import 语句,我们不需要在我们的活动中明确地创建 View 对象。我们可以直接从布局文件中定义的名称引用View。

    如果布局文件名是activity_main.xml,我们应该

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

    详情请看这里:http://kotlin-andro.blogspot.in/2017/07/kotlin-android-extensions.html

    【讨论】:

      【解决方案2】:

      这背后有什么不同或任何原因

      是的,有区别。

      kotlin-android-extensions 插件不是 kotlin-android 插件的一部分。添加扩展插件(Android Studio 为您显式或自动添加)的原因之一是无需处理 findViewById 函数,因为它可以帮助您无缝地恢复视图。 p>

      编译器在内部创建了一个小的隐藏缓存函数,它为每个视图调用 findViewById,下次您使用同一个视图时,它将从缓存中获取它而不是调用 findViewById 再次。

      因此,您添加 kotlin-android 来为 Android Studio 设置 Kotlin,并添加 kotlin-android-extensions 以消除调用 findViewById 的需要。

      干杯,编码愉快!

      【讨论】:

        【解决方案3】:

        kotlin-android 用于 kotlin 支持,kotlin-android-extensions 用于替换 android 中 java 的 findViewById 概念。通过在您的项目中使用 kotlin-android-extensions,您可以通过您在 .xml 文件中提到的 Id 直接访问比如:android:id="@+id/tvNextAbout" 您可以在活动示例中使用它:

        tvNextAbout.setOnClickLisnet{}
        

        【讨论】:

          【解决方案4】:
          • kotlin-android-plugin 允许您在 Android Studio 上使用 kotlin;
          • kotlin-android-extensions 提供了一套 if 工具来简化 android 开发。

          https://kotlinlang.org/docs/tutorials/android-plugin.html https://kotlinlang.org/docs/tutorials/kotlin-android.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-02-07
            • 2021-12-22
            • 2017-10-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-06-10
            • 2023-04-03
            相关资源
            最近更新 更多