用于ViewModels的自定义半广义工厂

我想创建一个广义的ViewModelProvider.Factory来实例化我的ViewModels class BundledAppFactory(private var bundle: AppParameterBundle) : ViewModelProvider.NewInstanceFactory() { override fun create(modelClass: Class): T { Log.d(“Factory”, “Creating ${modelClass.canonicalName}”) Log.d(“Factory”, “${modelClass.canonicalName} has ${modelClass.constructors.size} constructors and ${modelClass.declaredConstructors.size} declaredConstructors”) modelClass.constructors.forEach { Log.d(“Factory”, “Constructor: $it”) } return when { AppViewModel::class.java.isAssignableFrom(modelClass) -> modelClass.getDeclaredConstructor(AppParameterBundle::class.java).newInstance(bundle) AppTeamUserViewModel::class.java.isAssignableFrom(modelClass) -> modelClass.getDeclaredConstructor(AppTeamUserParameterBundle::class.java).newInstance(bundle) AppTeamUserHuntIdViewModel::class.java.isAssignableFrom(modelClass) -> modelClass.getDeclaredConstructor(AppTeamUserHuntIdParameterBundle::class.java).newInstance(bundle) AppStringViewModel::class.java.isAssignableFrom(modelClass) -> modelClass.getDeclaredConstructor(AppStringParameterBundle::class.java).newInstance(bundle) else -> super.create(modelClass) } } } 这些是我的包: open […]

各种问题@NonNull,@NotNull和@ParametersAreNonnullByDefault

我是使用AndroidStudio或IntelliJ IDEA的Android开发者。 我倾向于相信我的IDE,并且对下一个事实感到恼火: 在IDE项目中,当IDE自动生成扩展Kotlin类的java中的一个方法时,两个IDE都使用@NotNull而不是@NonNull ,是否有这样的设置? 这个 我们有@ParametersAreNonnullByDefault但是当我从第1点重写方法,并且我没有把任何注释IDE警告我,但为什么? 我的假设是错的吗? 有解决方案吗?

Kotlinx从错误的布局注入视图

我有一段代码检查视图是否可见 import kotlinx.android.synthetic.main.activity_layout.* val isOverflowPanelShown: Boolean get() = overflow_panel.visibility != View.GONE 以前的代码会抛出exception java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to android.widget.ScrollView at com.company.app.Activity.isOverflowPanelShown(Activity.kt:362) 该视图是ScrollView类的实例,但是kotlin认为它是一个FrameLayout 。 调用findViewById()在相同的地方作为错误被抛出正确返回ScrollView。 我发现在应用程序的不同布局中, 在相同的ID下有一个FrameLayout 。 我正在充气下面的布局 activity_layout 在另一个布局中,我使用完全不同的地方,有一个不同的视图,具有相同的ID。 form_component_main

检测视图碰撞并防止覆盖

当我正在使用Kotlin android框架进行一个益智游戏时,我被困在了一点,当我无法弄清楚如何防止imageViews在移动时互相重叠时,我尝试了很多解决方案,没有任何工作,如果任何人可以告诉我如何防止它们重叠或告诉我如何检测碰撞的正确方法。 这里是我用来检测碰撞的代码: //onCreate getRundomPosition() //this method is used to put the imageView in some random position imageView.getDrawingRect(rc1) imageView2.getDrawingRect(rc2) imageView3.getDrawingRect(rc3) imageView4.getDrawingRect(rc4) imageView5.getDrawingRect(rc5) imageView6.getDrawingRect(rc6) imageView7.getDrawingRect(rc7) //the function I use to check collision it’s called after a swipe event fun checkIntersection(rc:Rect):Boolean{ var b:Boolean if(Rect.intersects(rc,rc1)) b=true else if(Rect.intersects(rc,rc2)) b=true else if(Rect.intersects(rc,rc3)) b=true else if(Rect.intersects(rc,rc4)) b=true else if(Rect.intersects(rc,rc5)) b=true […]

云function:Firestore Promise链

我有Firestore数据库。 收集简单: “tasks / {taskId}”:{ “ownerUid”:“任务拥有者Firebase Uid”, “whoDidUids”:[“user_1_FirebaseUid”,“user_2_FirebaseUid”] } “users / {userUid}”:{“fcm_token”:“firestore云消息传递令牌”} 只需要编写简单的云function,将触发: exports.taskDoneNotification = functions.firestore .document(‘tasks/{taskId}’) .onUpdate((event) => { //when another user did task it means //userUid will be added to task.whoDidUids array //I want to get task owner fcmToken and send him // simple notification like “your task done by someone!” }); 我是js语法的新手,在Kotlin上为Android写作。 […]

使用Realm + PowerMockito无法在Android Studio中运行Robolectric测试

我使用Realm,PowerMockito和Robolectric为我的应用程序编写测试。 如果使用./gradlew test ,测试运行正常,但是如果使用Android Studio中的配置运行。 它会显示如下错误。 com.thoughtworks.xstream.converters.ConversionException: Cannot construct org.powermock.modules.junit4.rule.PowerMockStatement$1 as it does not have a no-args constructor : Cannot construct org.powermock.modules.junit4.rule.PowerMockStatement$1 as it does not have a no-args constructor 有没有人有这个问题的解决方案? 这是我在Kotlin写的测试。 @RunWith(RobolectricGradleTestRunner::class) @Config(application = TestApplication::class, constants = BuildConfig::class, sdk = intArrayOf(21)) @PowerMockIgnore(“org.mockito.*”, “org.robolectric.*”, “android.*”) @SuppressStaticInitializationFor(“io.realm.internal.Util”) @PrepareForTest(RealmCore::class, RealmLog::class, Realm::class, RealmResults::class, RealmQuery::class) class RealmMiddlewareTest { data […]

在KotlinJS中使用标准HTML元素可以安全地输入

我试图动态创建一个图像,然后我将附加到DOM。 import org.w3c.dom.HTMLImageElement fun main(args: Array) { // load footer banner image val img: HTMLImageElement = HTMLImageElement() with (img){ src = “img/footer.png” classList.add(“img-responsive”) } } 但是,它不喜欢我的构造函数HTMLImageElement()因为HTMLImageElement是一个接口。 删除构造函数和Kotlin抱怨img必须被初始化。 什么是以types安全的方式使用HTMLImageElement的正确方法? 更新 :我现在正在使用maven生成所有的应用程序。 4.0.0 com.blah blah jar 1.0.0 Blah 1.0.2 0.5.8 bintray-kotlinx bintray http://dl.bintray.com/kotlinx/kotlinx org.jetbrains.kotlinx kotlinx.html.js ${kotlin.html.version} 编译blah.js , blah.js.map , blah.js.meta , kotlin.js , kotlinx.html.js , kotlinx.html.meta.js […]

在子项目中执行任务时如何删除rootDir中的文件夹?

我有一个像这样的kotlin项目设置: ———————————————————— Root project ———————————————————— Root project ‘js’ +— Project ‘:home’ +— Project ‘:info’ +— Project ‘:infoAdmin’ +— Project ‘:locations’ +— Project ‘:login’ +— Project ‘:member’ +— Project ‘:news’ +— Project ‘:profiles’ +— Project ‘:salectServer’ +— Project ‘:stdFm’ \— Project ‘:stdList’ 现在在root项目中根本没有代码,只是一个维护者。 在这个根项目中有一个build文件夹,我想在每次执行clean任务时都要删除,即使是从子项目中。 我试过了: subprojects{ clean.doLast { delete “${project.rootDir}/build/” } } 没有运气。 它根本不会触及该文件夹。 如何删除它?

Gradle,’url’不能用于(java.lang.String)

一段时间以来,在任何maven { url “whatever” }我得到这个警告: 这里是一个遇到问题的示例项目 这不是一个封锁,而是一个恼人的问题 有谁知道它来自哪里? 眼镜: 理念IU 181.3263.15 JRE 1.8.0_152 科特林1.2.21 gradle 4.4.1 赢7 x64

Android Studio 3.0。 不在信息windwos上显示错误

Android Studio 3.0。 这里xml: 当我编译错误时,我得到这个奇怪的消息: 为什么它告诉我关于Kotlin? 我有错误的XML文件! 只有当我打开Gradle窗口后,我看到正确的显示错误: 我想让Studio向我展示真实/正确的错误消息。