什么可以在编译时常量(const val)中expression?

编译时常量的文档列出了属性需要履行的三个要求,以便将其声明为const val 。 这些是: 对象的顶级或成员 使用Stringtypes的值或基元types初始化 没有自定义的getter “无自定义getter”的要求使我相信我不能在常量声明中使用任何函数,但是这似乎并非如此。 这些编译: const val bitmask = (5 shl 3) + 2 const val aComputedString = “Hello ${0x57.toChar()}orld${((1 shl 5) or 1).toChar()}” const val comparedInt = 5.compareTo(6) const val comparedString = “Hello”.compareTo(“World!”) const val toStringedInt = 5.compareTo(6).toString() const val charFromString = “Hello World!”.get(3) 但是,这些不会编译: // An extension function on […]

如何在GSON中反序列化Kotlin代表

我有这个class级: class Project { val nameProperty = SimpleStringProperty(“foobar”) val name by nameProperty } 我使用Fx-GSON库来序列化JavaFx属性。 当我序列化到JSON我得到这个: { “nameProperty”: “foobar”, “name$delegate”: “foobar” } 但是,当我将其反序列化回到Projecttypes的对象时, name和nameProperty是2个不同的对象 。 如何使name属性委托给新的nameProperty ?

使用Kotlin WHEN子句进行<, =,>比较

我试图使用WHEN子句与>或<比较。 这不会编译。 在比较中使用普通的布尔运算符( =>)来实现这一点吗? val foo = 2 // doesn’t compile when (foo) { > 0 -> doSomethingWhenPositive() 0 -> doSomethingWhenZero() doSomethingWhenNegative() } 我试图find一个无界的范围比较,但无法做到这一点呢? 有可能把这个写成一个无限的范围吗? // trying to get an unbounded range – doesn’t compile when (foo) { in 1.. -> doSomethingWhenPositive() else -> doSomethingElse() } 你可以把整个expression式放在第二部分,这可以,但似乎是不必要的重复。 至少它编译和工作。 when { foo > 0 -> doSomethingWhenPositive() […]

Android-Facebook应用程序的关键哈希

我正在开发一个Android应用程序,我想在其中集成Facebook发布function。 我下载了Facebook-Android SDK,并在那里获得了readme.md(文本文件),其中提到了为Android生成密钥散列。 我如何生成它?

是否有可能变灰(而不仅仅是禁用)Android中的MenuItem?

在Blackberry上有同样的function,有几个不同的线程提到了这个bug (从我的分析结果来看 ,这个bug已经被解决了),但是我还没有find一个专门针对Android的bug 。 我打电话setEnabled(false)在某些MenuItems基于某些状态,但他们在外观上看起来是一样的。 我想他们以某种方式抵消,以便用户知道目前​​的选项不可用 – 有什么办法可以做到这一点?

通过订阅/取消订阅从侦听器发出项目的正确方法

在MVP架构之后,视图是一个Android活动,每个人都有自己的主持人。 作为数据存储库,我有一个图层,每次在后端发生变化时都会通知我新的数据。 存储库可以由不同的演示者使用,演示者必须在视图被销毁时销毁。 如何实现一个响应式流(每个存储库一个),演示者可以订阅和取消订阅以获取数据更新? 其他要求是流应该能够结合并应用它们的反应操作符。 我通过Firebase Firestore后端尝试了以下内容,但发现内存泄漏(活动和演示者不会被破坏)。 注意:当后端发生变化时,addSnapshotListener()回调会通知新数据。 正如您所看到的,observable是公开的(默认情况下是Kotlin),供演示者使用,用于订阅和取消订阅。 class DocumentRepository( path: List, private val model: Class) { private var documentReference: DocumentReference val observable: Observable private var emitter: ObservableEmitter? = null private lateinit var item: T init { documentReference = FirebaseFirestore.getInstance().collection(path[0]).document(path[1]) for (i in 2..path.lastIndex step 2) documentReference = documentReference.collection(path[i]).document(path[i + 1]) observable = Observable.create(this::listenChanges) […]

在自定义视图中绘制自定义视图

我正在处理自定义视图TreeView ,它将显示给定根节点的树。 我正在使用Kotlin语言。 以下是目前的部分内容: override fun onDraw(canvas: Canvas?) { super.onDraw(canvas) drawNodeAndChildren(canvas, rootNode) } /** * Draws a representation of a node and its children onto the canvas. * … */ private fun drawNodeAndChildren(canvas: Canvas, node: TreeNode, …): Int { … // Calculate coordinates of rect val top = … val bottom = … val left […]

在Kotlin中使用Javascript库

我最后一次使用Kotlin的时候是2015年12月,当时我用它来解决一些欧拉项目问题。 这一次我想尝试与Javascript的互操作性。 现在我的问题是,我们如何在Kotlin中导入/使用现有的Javascript库? 我见过一些使用native关键字的人,我只是想简单地解释一下。

Espresso,当NestedScrollView或RecyclerView在CoordinatorLayout中时,滚动不起作用

它看起来像CoordinatorLayout打破了Espresso的行为,如scrollTo()或RecyclerViewActions.scrollToPosition() 。 问题与NestedScrollView 对于这样的布局: … … 如果我尝试使用ViewActions.scrollTo()滚动到NestedScrollView内的任何视图,我发现第一个问题是,我得到一个PerformException 。 这是因为这个动作只支持ScrollView而NestedScrollView不能扩展它。 这个问题的解决方法在这里解释,基本上我们可以在scrollTo()复制代码,并改变约束来支持NestedScrollView 。 这似乎工作,如果NestedScrollView不是在CoordinatorLayout但只要你把它放在一个CoordinatorLayout滚动操作失败。 问题与RecyclerView 对于相同的布局,如果我将NestedScrollView替换为RecyclerView ,滚动也会出现问题。 在这种情况下,我使用RecyclerViewAction.scrollToPosition(position) 。 不像NestedScrollView ,在这里我可以看到一些滚动发生。 但是,它看起来像滚动到错误的位置。 例如,如果我滚动到最后一个位置,它将显示倒数第二,但不是最后一个。 当我将RecyclerView移出CoordinatorLayout ,滚动就像它应该的那样工作。 目前,由于这个问题,我们无法为使用CoordinatorLayout的屏幕编写Espresso测试。 任何人遇到同样的问题或知道解决方法?

Anko floatingActionButton缺失或冲突的依赖关系

下面这个稍微过时的教程 ,我卡住试图使用org.jetbrains.anko.design.floatingActionButton 。 错误是: 无法访问类“android.support.design.widget.FloatingActionButton”。 检查您的模块类路径是否存在缺失或冲突的依赖关系。 build.gradle(Project) buildscript { ext.kotlin_version = ‘1.1.50’ ext.anko_version = ‘0.10.1’ repositories { google() jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:3.0.0-beta6’ classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } build.gradle(App) apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ apply plugin: ‘kotlin-android-extensions’ android { […]