android - 将类类型作为参数传递并针对 Kotlin 中的另一个对象检查类型

标签 android kotlin android-espresso

我正在尝试编写一种方法来等待一种类型的 Activity 出现以进行我的 Espresso 测试。我见过尝试等待对象出现在单独的 Activity 而不是测试开始的地方的例子,但到目前为止没有一个对我有用,而且我不想用空闲资源修改我的生产代码。

在我的方法中,我想获取当前 Activity ,然后检查该 Activity 是否是我想要的特定类型的类。我基本上是在修改我发现的一些代码 here使用 Kotlin 和通用类类型。不幸的是,我不知道如何格式化传入的参数(当前为 Class<out Activity> )或者我在我的 if 中不正确地使用它陈述。下面写的不编译。

关于如何将我想要的 Activity 类型作为参数传递给 waitForActivity 的任何指示方法以及如何检查它?

fun waitForActivity(activityType: Class<out Activity>, timeout: Int = 10): Boolean {
    val endTime = System.currentTimeMillis() + (timeout * 1000)

    do {
        val currentActivity = getActivityInstance()

        // THIS LINE IS MY ISSUE **********************************************
        if(currentActivity != null && currentActivity::class.java is activityType)
            return true
        // ********************************************************************

        SystemClock.sleep(100)
    } while (System.currentTimeMillis() < endTime)
    return false
}

private fun getActivityInstance(): Activity? {
    val activity = arrayOfNulls<Activity>(1)
    InstrumentationRegistry.getInstrumentation().runOnMainSync {
        val currentActivity: Activity?
        val resumedActivities = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED)
        if (resumedActivities.iterator().hasNext()) {
            currentActivity = resumedActivities.iterator().next() as Activity
            activity[0] = currentActivity
        }
    }
    return activity[0]
}

最佳答案

您可以使用 Class.isInstance 替换整行.

if (activityType.isInstance(currentActivity)) { ... }

在 Kotlin 中,is 需要一个类名(在编译时,您也不能使用 String)——而不是 Class 实例。 Class.isInstance 用于使用 Class 实例执行相同的检查。

关于android - 将类类型作为参数传递并针对 Kotlin 中的另一个对象检查类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49860710/

相关文章:

android - Android 中 CheckBox 右侧的文本

android - 如何检测 Android MapView 是否已平移或缩放?

android - 在 Android 上创建照片共享应用程序

Android Espresso 点击 ImageButton 点击​​错误位置

安卓 Espresso : Wait for Activity to finish/start

android - Android Studio HPROF 引用树元素颜色代表什么?

generics - 为什么通用代数数据类型需要 `T` 成员类型?

android - 我们可以在另一个类中使用来自其他类的可组合函数吗?

使用 Java 模块构建 Gradle Kotlin DSL 多项目

android - 什么 id 名称约定对 Kotlin android 扩展有好处