首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android Studio3.0中Kotlin-android与kotlin-android-extensions的区别

android Studio3.0中Kotlin-android与kotlin-android-extensions的区别
EN

Stack Overflow用户
提问于 2017-07-12 19:57:01
回答 4查看 604关注 0票数 1

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

代码语言:javascript
复制
apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

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

EN

回答 4

Stack Overflow用户

发布于 2017-07-20 22:43:56

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

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

如何使用Kotlin访问TextView :

代码语言:javascript
复制
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文件中的插件和activity类中的import语句。

代码语言:javascript
复制
apply plugin: 'kotlin-android-extensions'

import statement in Activity:

import kotlinx.android.synthetic.main.activity_login.*

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

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

代码语言:javascript
复制
import kotlinx.android.synthetic.main.activity_main.*.

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

票数 0
EN

Stack Overflow用户

发布于 2017-08-28 02:22:28

这背后有什么不同或原因吗?

是的,这是有区别的。

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

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

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

干杯,编码快乐!

票数 0
EN

Stack Overflow用户

发布于 2018-05-24 22:27:50

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

代码语言:javascript
复制
tvNextAbout.setOnClickLisnet{}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45057059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档