Kotlin - MainActivity扩展了AppCompatActivity,找不到onRequestPermissionsResult函数,无法覆盖

时间:2017-07-23 14:35:59

标签: android kotlin

我有一个扩展AppCompatActivity的试用活动类Main Activity。在文档中,当我尝试覆盖onRequestPermissionsResult上的方法时,AppCompatActivity继承了onRequestPermissionsResult方法,    此错误显示

  

"错误:(95,5)' onRequestPermissionsResult'没有任何内容"

    class MainActivity : AppCompatActivity(),  ConnectionCallbacks, OnConnectionFailedListener{
    //I didnt include the other functions in the interfaces, suffice to say i have already added them in the original

    override fun onRequestPermissionsResult(requestCode : Int , permissions: Array<String>, grantResults: Array<Int>){
        println("SHOULD HAVE THIS FUNCTION")
    }
}

1 个答案:

答案 0 :(得分:0)

Kotlin Array<Int>映射到Java Integer[]IntArray映射到Java int[],它们是Java中不同的数组类型。你可以在Kotlin看到mapped types更进一步。

AppCompatActivity#onRequestPermissionsResult方法签名是:

override fun onRequestPermissionsResult(requestCode : Int , 
                                        permissions: Array<String>,     
                                        grantResults: IntArray){
    //      it is IntArray rather than Array<Int>   ---^  
    TODO()
}

而不是:

override fun onRequestPermissionsResult(requestCode : Int , 
                                        permissions: Array<String>, 
                                        grantResults: Array<Int>){
    TODO()
}

注意:如果api承诺其参数永远不会是null,例如onRequestPermissionsResult,那么您可以使用IntArray来简化参数使用。否则,您应该使用IntArray?代替。

IF 你不想知道Kotlin中的所有mapped types,还有另一种方法可以让你快速覆盖超类方法。首先,将光标放在类中,然后按CTRL+O选择要覆盖的方法。例如:

class MainActivity : AppCompatActivity(), 
                     ConnectionCallbacks,
                     OnConnectionFailedListener{
// put the cursor here, press `CTRL+O` to select which method you want to override
}