从内部类引用活动时出现 Kotlin 错误

Iku*_*kun 7 android android-asynctask kotlin

我在用 Kotlin 编写的 Activity 中有一个 AsyncTask 作为内部类。现在,我尝试使用 AsyncTask 的 onPostExecute 访问 Activity,this@MyActivity但 Android Studio 将其报告为 Unresolved Reference 错误。但这是在线建议用于从 InnerClass 引用 OuterClass 的最常用方法。代码如下:

class MyActivity : AbstractAppPauseActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
}

override fun onResume() {
    super.onResume()
}

class MyTask(private var mContext: Context?, val pbMigrating: ProgressBar) :AsyncTask<Void, Int, Void>() {


    private var size: Long = 0

    override fun onPreExecute() {
        super.onPreExecute()
        ...

    }

    override fun doInBackground(vararg params: Void?): Void? {
        ...
        return null
    }

    override fun onProgressUpdate(vararg values: Int?) {
        super.onProgressUpdate(*values)
        pbMigrating.progress = values[0] as Int

    }

    override fun onPostExecute(result: Void?) {
        super.onPostExecute(result)
        this@MyActivity //<- Cannot Resolve error here 
    }


}

}
Run Code Online (Sandbox Code Playgroud)

vis*_*gid 8

你必须把班级设为内部

class MyActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onResume() {
        super.onResume()
    } inner class MyTask(private var mContext: Context?, val pbMigrating: ProgressBar) : AsyncTask<Void, Int, Void>() {

        private var size: Long = 0

        override fun onPreExecute() {
            super.onPreExecute()
        }

        override fun doInBackground(vararg params: Void?): Void? {
            return null
        }

        override fun onProgressUpdate(vararg values: Int?) {
            super.onProgressUpdate(*values)
            pbMigrating.progress = values[0] as Int
        }

        override fun onPostExecute(result: Void?) {
            super.onPostExecute(result)
            this@MyActivity //<- Cannot Resolve error here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)