Tag: 安卓

在Android Studio中将代码从Java转换为Kotlin

任何人都可以解释如何用Android Studio中的Kotlin替换现有的Java代码?

如何在Kotlin中使用Dagger的2 @Named限定符

最近我遇到了Kotlin的@Named限定符问题。 我认为从这个转变为: var boldTypeface: Typeface? = null [Inject] set 进入这个 var boldTypeface: Typeface? = null [Inject Named(“bold”)] set 要么 var boldTypeface: Typeface? = null [Inject] [Named(“bold”)] set 会解决我的问题。 但它没有,甚至没有编译。

@用AndoridInjector和Kotlin在SubComponent中提供方法

我正在使用Dagger2 AndroidInjector和Kotlin。 我有一个这样定义模块的子组件: @Subcomponent(modules = arrayOf( UIModule::class, HomeActivitySubcomponent.ComponentModule::class )) interface HomeActivitySubcomponent : AndroidInjector { @Subcomponent.Builder abstract class Builder : AndroidInjector.Builder() @Module abstract class ComponentModule { @Binds @IntoMap @ActivityKey(HomeActivity::class) internal abstract fun bindMainActivityInjectorFactory(builder: Builder): AndroidInjector.Factory } } 如果这是Java我可以添加一个静态@Provides方法的ComponentModule @Module。 它必须是静态的,因为Dagger抱怨,如果我添加一个非静态方法的@Module类使用@Binds: 错误:@Module可能不包含非静态@Provides方法和抽象@Binds或@Multibinds声明 问题是:如何与Kotlin做到这一点?

Kotlingenericstypes,types推断失败

Kotlin参考文件说这个例子是有效的。 https://kotlinlang.org/docs/reference/generics.html#upper-bounds fun cloneWhenGreater(list: List, threshold: T): List where T : Comparable, T : Cloneable { return list.filter { it > threshold }.map { it.clone() } } 但在Android studio 3.0中,它显示在它下面的细红线it.clone() 。 it.clone() 。 而错误信息是: types推断失败。 期望的types不匹配。 必需: List find: List 为什么这个例子不能被编译?

转换Android项目与数据绑定从Java到Kotlin

我有一个用Java编写的大型Android项目,目前正在将其转换为Kotlin。 我的许多活动和片段都使用数据绑定。 最初,当我使用数据绑定将我的第一个活动转换为Kotlin时,该项目无法为此活动构建。 该错误表示缺少对数据绑定库的引用。 我补充说: kapt ‘com.android.databinding:compiler:2.0.0-beta6’ 到app/build.gradle依赖关系 kapt { generateStubs = true } 到相同的文件。 建立之后,数据绑定的Kotlin活动起作用,而所有其余的Java数据绑定活动现在都报告数据绑定包引用不存在。 这让我陷入困境。 我正计划将活动和片段一个一个地转换成Kotlin,并且随着时间的推移构建它们,但是现在看起来不可行,因为我必须在Java或Kotlin之间进行选择。 我发现Kotterknife: https : //github.com/JakeWharton/kotterknife ,这是一个Kotlin视图注入库,但我仍然不能相信,没有办法慢慢地把你的活动从Java转换到Kotlin,即使他们使用数据绑定。 这对我来说根本不可信。 有没有人在过去以这样的方式转换了一个项目,并且成功了,而不必做出选择呢? 有没有一种方法可以将单个活动转换成一个整体? 另一个选择是一次性将所有Java转换成Kotlin,然后在完成所有工作后进行一次单独构建,但是如果将所有工作放在一起,然后意识到自己忽略了某些东西,看起来有点冒险。 有任何想法吗? 提前致谢。

Kotlin数据类和可空types

我是Kotlin的新手,我不知道为什么编译器会抱怨这个代码: data class Test(var data : String = “data”) fun test(){ var test: Test? = Test(“”) var size = test?.data.length } 编译器抱怨test?.data.length ,它说我应该做的: test?.data?.length 。 但数据variables是String ,而不是String? ,所以我不明白为什么我要把? 当我想检查长度。

Kotlin:从Firebase获取数据

我正在努力寻找一种从我的Firebase数据库中获取单个值的有效方法。 我来自与Swift合作。 当使用Swift从Firebase获取数据时,就像创建一个字典并通过它访问数据一样简单,这使得我可以访问这个值来做一些事情。 例如 guard let dictionary = snapshot.value as? [String: AnyObject] else { return } let username = dictionary[“username”] as? String if username == “Bob” { // do something } 我只能在网上find使用循环来循环Kotlin快照的文档和答案。 有没有一个高效的方法来做到这一点? 这里是我可以在网上find的。 这里有一个片段,让你开始。 对此,我真的非常感激。 mReference.getReference(“users”).addListenerForSingleValueEvent(object : ValueEventListener { override fun onCancelled(p0: DatabaseError?) { TODO(“not implemented”) } override fun onDataChange(snapshot: DataSnapshot?) { val children […]

从字符串拆分空间不工作在Kotlin

有谁想知道这个? 在kotlin中拆分SPACE(“”)是不行的,我尝试了不同的正则expression式代码,但是根本不工作。 试过这个: value.split(“\\s”)[0]; value.split(“\\s+”)[0]; value.split(“\\s++”)[0]; 然后我想出了解决方案 – >创建包含此函数的Java常量类,并返回字符串数组到您的kotlin类。 有没有其他的解决方案,我们可以直接实现这个问题? 解决方案:正如@Edson Menegatti所说: 科特林具体:工作 values.split(“\\s”.toRegex())[0] 许多人提出这个解决方案: 不工作 values.split(” “)[0] 但在我的情况下,这是行不通的 。

Kotlin库项目失败的解决方案:[Lkotlin / reflect / KProperty

我目前正在建立一个写在Kotlin的图书馆项目。 当我导出一个.aar文件并在一个项目上编译时,我得到了一个by lazy lambda .aar的以下错误。 我在示例应用程序中有错误 Rejecting re-init on previously-failed class java.lang.Class: java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/jvm/internal/Lambda; … java.lang.NoClassDefFoundError: Failed resolution of: [Lkotlin/reflect/KProperty; … Caused by: java.lang.ClassNotFoundException: Didn’t find class “kotlin.reflect.KProperty” on path: DexPathList 在库项目中引用的行exception private val view: View by lazy { LayoutInflater.from(context).inflate(R.layout.overlay_view, this, false) } 库项目的Gradle文件 apply plugin: ‘com.android.library’ apply plugin: ‘kotlin-android’ apply plugin: […]

在Kotlin for Android中使用Pair时的性能

我一直在使用ViewPager的以下适配器类。 它从Java转换为Kotlin。 class ViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager) { private val mFragmentList = ArrayList() private val mFragmentTitleList = ArrayList() override fun getItem(position: Int): Fragment { return mFragmentList[position] } override fun getCount(): Int { return mFragmentList.size } fun addFragment(fragment: Fragment, title: String) { mFragmentList.add(fragment) mFragmentTitleList.add(title) } override fun getPageTitle(position: Int): CharSequence? { return mFragmentTitleList[position] } } 为了尽量减少我尝试使用Kotlin […]