如何在Kotlin上解决PagerAdapter的问题:“未重写必需的方法InstantiateItem”?

时间:2018-08-27 18:36:58

标签: android kotlin android-pageradapter kotlin-android-extensions

所以我的项目正在将Kotlin文件调用为Java:

这是我收到的错误消息(运行时错误):
java.lang.UnsupportedOperationException: Required method instantiateItem was not overridden



这是我的应用gradle

apply plugin: 'kotlin-android'
android {
    compileSdkVersion 26
....
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

dependencies {
....
    implementation "org.jetbrains.kotlin:kotlin-stdlib"
}

我的项目gradle 外观:

buildscript {
    ext.kotlin_version = '1.2.61'
    repositories {
...

}
dependencies {
....
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

    }
}






最后,这是我的 kotlin 代码,

class SwipeAdapter : PagerAdapter {
....
...
    override fun instantiateItem(container: ViewGroup?, position: Int):Any {
      .....
     ....
        return super.instantiateItem(container, position)
    }

    .....
}

(我试图将其更改为java.lang.Object,但是当然出现了编译错误, 对于Kotlin,必须为“任意”类型。

java 文件上调用:

PagerAdapter sa= new SwipeAdapter(someArgs);

1 个答案:

答案 0 :(得分:2)

您将收到异常,因为您仍将工作委托给super调用,然后调用此实现:

@Deprecated
@NonNull
public Object instantiateItem(@NonNull View container, int position) {
    throw new UnsupportedOperationException(
            "Required method instantiateItem was not overridden");
}

您应该返回创建的对象来表示给定位置的页面,而不是调用super方法。通常是View本身,有关PagerAdapter的示例,请参见this questionthis tutorial