Tag: kotlin android extensions

如何用kotlin @Parcelize使用null

这里是非常简单的代码: @Parcelize data class Inner(val a: Int): Parcelable @Parcelize data class Test(val a: Int, val inner: Inner?): Parcelable @RunWith(AndroidJUnit4::class) class ExampleInstrumentedTest { @Test fun testParcel() { val test = Test(0, null) val parcel = Parcel.obtain() parcel.writeParcelable(test, test.describeContents()) } } 我有可空的属性Test.inner 。 如果它不为空,代码工作正常,但是当它为空,那么我有例外: java.lang.NullPointerException: Attempt to invoke interface method 'void android.os.Parcelable.writeToParcel(android.os.Parcel, int)' on a null object […]

将ArrayMap转换为ArrayList – Kotlin

我有一个ArrayMap,我想要一个聊天列表创建和recyclerview。 val chats : ArrayMap<String,Chat>? = ArrayMap() RecyclerView.Adapter class ChatAdapter(var chats : ArrayList<Chat>){ . . . } 我从firebase获取这个ArrayMap。 获取ArrayList的最佳方式是什么?

Kotlin的综合性质冲突

我是Kotlin的新手。 除了其他一些非常有趣的事情之外,我发现Android扩展应该让我使用活动的视图,而不需要findViewById 。 其实它通过在我的进口中添加这一行非常好: import kotlinx.android.synthetic.main.<layout>.* 问题是,当两个不同的布局包含一个相同的ID(即合成属性相同的名称)的小部件, 例如使用id txtTitle两个不同的TextView 。 假设第一个属于一个活动,第二个属于适配器内部使用的布局。 当我尝试在第一个TextView(活动的一个)上调用方法时,我看不到预期的结果,就好像该调用将在另一个视图上完成一样。 作为对此的确认,当我调用txtTitle.parent ,我看到其他txtTitle的父代和兄弟,而不是预期的。 我做错了什么? 我发现绕过这个问题的唯一方法是在我的所有布局中使用不同的名称,或继续使用findViewById ,但遗憾的是浪费此语言功能…

Kotlin扩展/合成属性:多个调用中的相同对象Fragment.onViewCreated()

我正在使用kotlin-android-extensions从我的布局导入合成视图属性到我的片段。 在我的onViewCreated()片段方法中,我正在EditText视图上调用addTextChangedListener()是一个合成的导入。 这在第一次实例化Fragment的时候工作的很好,但是下一次,我的新侦听器被添加到最后一次调用的同一个视图对象中。 所以,现在TextChangedListener对象正在触发文本更改,结果可想而知。 据我所知,片段首次出现的观点从来没有被取消过。 这里是我输出的日志记录视图对象,显示它是同样的事情。 首次亮相: AmountTextWatcher (com.redacted.util.AmountTextWatcher@36d1ccc) added to amount_edit_text: android.support.v7.widget.AppCompatEditText{79e2a VFED..CL. ……I. 0,0-0,0 #7f0f013a app:id/amount_edit_text} 第二次出现: AmountTextWatcher (com.redacted.util.AmountTextWatcher@5812584) added to amount_edit_text: android.support.v7.widget.AppCompatEditText{79e2a VFED..CL. ……ID 0,0-434,200 #7f0f013a app:id/amount_edit_text} 当然,我可以通过使用findViewById()来访问我的视图,而不是合成参考,但我想知道是否有其他人正在运行这个问题,如果有更好的方法来处理它(其他比不使用综合视图参考。) FYI:使用Kotlin版本1.0.6 。

Kotlin Custom View类实现了一个无法在`:app:compileDebugKotlinAfterJava`中解析的接口。 相同的Java版本正常工作

我有一个Android项目,其中包含一个带有泛型类的aar library module ,这些泛型类被用作几个应用程序的基础。 一切都是用Kotlin编写的,没有使用Java代码(第三方库除外)。 尝试组装应用程序以运行时,会发生此问题。 试图运行我的应用程序时出现以下错误: :app:compileDebugKotlinAfterJava e: Supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath: class com.test.app.view.ECMKotlinTextView, unresolved supertypes: com.test.lib.localization.Localizable 为了这个问题的目的,我写了一个自定义TextView的两个单独的版本,它扩展了android.widget.TextView类并实现了一个接口,让我们说Localizable ; 一个在Java ,另一个在Kotlin 。 ECMJavaTextView.java package com.test.lib.view; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.util.AttributeSet; import android.widget.TextView; import com.test.lib.localization.Localizable; import org.jetbrains.annotations.NotNull; […]

android.R.id视图绑定在Kotlin

我有布局android.R.layout.simple_list_item_1其中是一个ID为@android:id/text1或android.R.id.text1的TextView ,我想要像view.text1.setText("bannoe it")我怎样才能做到这一点?

在gradle android库kotlin项目中禁用META-INF / *生成

美好的一天。 我写了一个kotlin android库并将其上载到bintray。 但是当我尝试在某些项目中使用它(通过gradle编译)时,它无法生成以下错误: > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/library_release.kotlin_module File1: C:\Users\Charlie\.android\build-cache\2939fbc6b0336396c9c4912d615880645b2c729d\output\jars\classes.jar File2: C:\Users\Charlie\OneDrive\Dev\Projects\AndroidStudio\MetuCardLib\demo\build\intermediates\bundles\default\classes.jar 我查阅了这两个.jar文件,它们都包含了带有library_release.kotlin_module文件的META-INF文件夹。 但更重要的是生成.aar(在bintray发布的Android存档)包含此文件夹以及此文件。 我已经检查了其他像样的bintray android库,它们似乎没有包含任何META-INF文件。 但是包含它的那些(在大多数情况下它们包含许可证文件)会产生相同的DuplicateFileException ,解决它的方法是在use-project的gradle文件中明确地排除它们。 这个library_release.kotlin_module文件有什么用处,我怎样在发布期间禁用它的生成? 因为我不想明确地排除使用这个库的每个项目,我也不想问其他开发者这样做。 这是图书馆的回购: https : //github.com/arslancharyev31/Anko-ExpandableTextView/它是bintray回购: https ://bintray.com/arslancharyev31/android/Anko-ExpandableTextView

Kotlin,Java,multidex,Dagger 2,Butterknife和Realm:transformClassesWithMargingForDebug:重复条目:org / jetbrains / annotations / NotNull.class

我们有现有的Java Android代码。 我们想要无痛地慢慢开始移动到Kotlin。 我们用Dagger 2,Butterknife和Realm。 我们使用Java 8编译器(但是我们的targetCompatibility和sourceCompatibility是1.7)。 我一直在网上漫游几个小时,看到了,GitHub对话等,并设法解决除了一个之外的所有问题: 构建是成功的,但是在尝试调试时,我们得到: Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'. > com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: org/jetbrains/annotations/NotNull.class 有没有办法解决Gradle中的重复条目(也许使用packagingOptions或resolutionStrategy ?因为它是来自插件的重复…?)? 再次 – build project没有任何错误,只有transformClassesWithJarMergingForDebug失败! 这是应用程序的gradle: apply plugin: 'com.android.application' apply plugin: 'kotlin-android' //apply plugin: 'com.neenbedankt.android-apt' apply plugin: 'realm-android' kapt { generateStubs = true } android { signingConfigs { config { keyAlias 'MyAndroidKey' keyPassword 'password' […]

Intellij IDEA中Kotlin项目的自动完成和代码分析非常慢

我们有一个关于IDEA的项目,它由几个中等大小的Java包和一个非常小的Kotlin包(5个文件)组成。 我注意到任何Java软件包的性能都很好,但是在自动完成,代码分析和编译Kotlin软件包的速度上,速度要慢10倍。 自动完成偶尔是非常缓慢的点popover无法加载所有的方法,它不得不加载一些API的增量。 每当我们的开发人员输入一个单词并等待自动完成,大约需要2-5秒才能显示预期的自动完成功能。 有时,自动填充功能太慢,无法显示任何内容,我们不得不取消单词并重新输入并等待。 在代码分析中出现同样的缓慢。 这显着影响了我的团队的生产力。 从我们的研究看来,这是一个众所周知的长期问题。 这也发生在我们的另一个小项目上。 我想知道我们能做些什么来解决这个问题? 谢谢。 Kotlin插件是最新版本:1.1.3-release-IJ2017.2-2 Intellij也是最新版本,2017年2.1(建立于2017年7月31日)

这种类型有一个构造函数,必须在这里初始化 – Kotlin

我刚开始使用Kotlin试验Android应用程序。 我只是想继承像这样的应用程序类: class SomeApp : Application { } 但是编译器提出了这样的警告: 并建议将其更改为: class SomeApp : Application() { override fun onCreate() { super.onCreate() } } 我阅读了文档中的主要和次要构造函数 。 所以,如果超类有一个主要的构造函数,那么是否有必要写在这里? 像Application类有它自己的构造函数 public Application() { super(null); } 那么有必要有派生的主要构造函数? 或者我不能像Java那样做一些事情: class SomeApp : Application { constructor SomeApp(){ super(); } } 或者这个错误提示了别的东西? 任何人都可以详细解释我吗? 我对这门语言很陌生,这对我来说很奇怪。 编辑:在Java我可以做到以下几点: class SomeApp extends Application{ } 它有隐含的构造函数,所以我不必写: class SomeApp […]