Tag: kotlin android extensions

Kotlin针对Android视图的综合属性差异?

Kotlin的Android扩展文档说,你基本上可以使用import语句做一个findViewById()的快捷方式。 然而,导入一个特定的视图kotlinx.android.synthetic.main.<layout-file-name>.<view-id>和从kotlinx.android.synthetic.main.<layout-file-name>.view.<view-id>导入kotlinx.android.synthetic.main.<layout-file-name>.view.<view-id> ? 如果你使用前者,IDE会显示三个相同的视图ID,Activity,Dialog和Fragment各一个。 如果你做了后者,它只显示一次的视图ID名称。

“对于超类型的Kotlin Android Studio的直接争论,不允许有预测

我在将Java转换为Kotlin时遇到此错误: Java的 public class HeaderTab extends ExpandableGroup { private String header; public HeaderTab(String title, List items) { super(title, items); } } 科特林 class HeaderTab(title: String, items: List<*>) : ExpandableGroup<*>(title, items) { private val header: String? = null } Android Studio这样说: 不允许对超类型的直接参数进行投影 我需要在这里修改什么?

Kotlin类没有从firebase获取它的布尔值

我有我的科林类 class Center : Serializable { var active: Boolean? = null var address: String? = null var isJobAccessGranted: Boolean? = null } 这里是我如何获得价值 //from java class @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { centerMap.put(dataSnapshot.getKey(), dataSnapshot.getValue(Center.class)); } 但问题是,我没有任何问题获得active领域的价值。 但isJobAccessGranted布尔型字段始终为空。 我已经测试了一些其他布尔去除is前缀工作正常。 当我使用isActive或isJobAccessGranted时,我不会得到布尔值。 任何人都可以解释为什么我面临这个问题。 #AskFirebase

异步获取Android Kotlin中的URL

所以我试图编写一个非常简单的Android应用程序,当按钮被按下时从URL获取响应。 kotlin Android扩展已经被广告作为Java中必要的样板的替代品,所以我试了我的手。 这是我到目前为止所尝试的: package com.example.susemihl.myapplication import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.widget.TextView import kotlinx.android.synthetic.main.activity_main.* import kotlinx.coroutines.experimental.CommonPool import kotlinx.coroutines.experimental.async import kotlinx.coroutines.experimental.runBlocking import java.net.URL suspend fun fetch_url(url: String): String { return URL(url).readText() } fun fetch_async(url: String, view: TextView) = runBlocking { val result = async(CommonPool) { fetch_url(url) } view.setText(result.await()) } class MainActivity : AppCompatActivity() { override fun […]

什么是这个java代码相当于kotlin

以下java代码的等价kotlin是什么: F f=new F(); convert(f, HashMap.class); 这是我迄今为止所尝试的 val f = F() convert(f, HashMap<*, *>::class.java) 这是我得到的错误: 只有类允许在类文字的左侧

Activity的onCreate方法中,Kotlin视图变量意外地为null

我有一个小的Java Android Studio项目,我使用Android Studio 3.0 Canary 3中的Kotlin转换器将所有四个源文件转换为Kotlin。 然后我做了一些小的修改来编译。 我只有一个活动,下面的代码: package com.ebelinski.soundboard import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.widget.AdapterView import kotlinx.android.synthetic.main.activity_storyboard.gridview; class StoryboardActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val itemManager = ItemManager(applicationContext) val items = itemManager.getItems().toTypedArray<Item>() setContentView(R.layout.activity_storyboard) val storyboardAdapter = StoryboardAdapter(this, items) gridview.adapter = storyboardAdapter gridview.onItemClickListener = AdapterView.OnItemClickListener { parent, v, position, id […]

Kotlin Textview id引用不适用于非英文字符

我在我的layout.xml中创建了非英文ID的Textview,然后我想在activity.kt中使用它 layout.xml, <TextView android:id="@+id/sonuç" . . … /> activity.kt, sonuç.text = "Hello World" 我得到一个错误,不解决的参考:sonuç 解决办法是什么? 更新! var sonuç : TextView = findViewById(R.id.sonuç) sonuç.text = "Hello World" 此代码在Kotlin中运行正常。 为什么?

Kotlin Android应用程序编译失败,消息:未解决的参考:kotlinx

我正在基于“Kotlin for Android Developers”一书中的说明测试一个基于Kotlin的Android应用程序。 我正在使用Android Studio 2.1.1。 我有以下build.grade(项目:WeatherApp)设置: allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } 我有以下build.grade(模块:应用程序)设置: apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' buildscript { ext.support_version = '23.1.1' ext.kotlin_version = '1.0.2' ext.anko_version = '0.8.2' repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" […]

错误:执行任务':app:clean'失败。 无法删除文件

我试图重建我的Android Studio Gradle项目(主要包含Kotlin代码),但在清理/重建过程中,它开始抛出UnableToDeleteFileException : Execution failed for task ':app:clean'. > Unable to delete file: C:\Users\User\KotlinGameEngine\app\build\intermediates\exploded-aar\com.android.support\appcompat-v7\23.0.1\jars\classes.jar 我试图改变我的项目的包结构后,开始发生。 不幸的是,我通过重命名和移动源文件夹,而不是通过Android Studio重构,这是一个坏主意。 我一直在寻找这个问题的解决办法,而这些都是我试图无效的东西: 做一个Gradle同步; 重新安装Java JRE和Java SDK; 重新安装最新版本的Android Studio(1.4); 回滚到以前的AS版本(1.3); 使AS缓存无效并重新启动; 删除项目目录中的gradle和.gradle目录; 删除我的用户目录中的.gradle目录; 从AS终端运行gradlew clean ; 手动将源代码复制到一个新项目(奇怪的是,它在某些项目中持续存在) 我已经尝试了一些成功的事情,但是只能让我再执行一次干净的任务,并在错误再次发生之前重建: 关闭AS,手动删除构建文件并再次打开它; 当AS正在运行时,杀死java.exe进程(这在技术上可以每次都完成,但是这很繁琐,并且会降低构建过程的速度) 所以看起来,编译Java进程可能会因为某种原因而对构建文件进行锁定,但这也可能与Kotlin有关。 我有一个(更成熟的)我正在处理的Java Android项目,虽然我不能在清理时重现此错误。 这似乎只发生在我的Kotlin项目上。 有任何想法吗? 提前致谢。 更新: 我发现问题是由Kotlin Android插件引起的。 当我从模块的build.gradle文件中删除apply plugin: 'kotlin-android'时,问题就消失了,当我重新插入时,它会回来。 随时提供任何洞察到这一点。 更新2: 最后的更新不是原因。 我发现如果一个项目包含一个Kotlin文件,那么重建和清理失败。 即使所有Kotlin文件都被删除,它仍然会失败,直到后台Java进程被终止,这意味着它在构建文件上有某种锁定。 我在这里提交了一个bug,更多的细节和步骤来重现错误: KT-9440

Android SDK类上的Kotlin扩展函数的单元测试

Kotlin扩展功能非常棒。 但是我怎么能对它们进行单元测试呢? 尤其是那些Android SDK提供的类(如Context,Dialog)。 我在下面提供了两个例子,如果任何人都可以分享我可以如何进行单元测试,或者如果我真的想单元测试它们,我需要以不同的方式编写它们。 fun Context.getColorById(colorId: Int): Int { if (Build.VERSION.SDK_INT >= 23) return ContextCompat.getColor(this, colorId) else return resources.getColor(colorId) } 和 fun Dialog.setupErrorDialog(body : String, onOkFunc: () -> Unit = {}): Dialog { window.requestFeature(Window.FEATURE_NO_TITLE) this.setContentView(R.layout.dialog_error_layout) (findViewById(R.id.txt_body) as TextView).text = body (findViewById(R.id.txt_header) as TextView).text = context.getString(R.string.dialog_title_error) (findViewById(R.id.txt_okay)).setOnClickListener{ onOkFunc() dismiss() } return this } 任何建议将有所帮助。 谢谢!