1

Android プロジェクトで Kotlin を試していました。私のアクティビティには、ネットワーク変更イベントのブロードキャスト レシーバーがあります。コードは次のとおりです。

BaseActivity.kt

  abstract class BaseActivity : AppCompatActivity() {

        private val networkChangeReceiver = NetworkChangeReceiver()


        override fun onStart() {
            super.onStart()
            registerReceiver(
                    receiver = networkChangeReceiver,
                    intentFilter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
            )
        }

        override fun onStop() {
            super.onStop()
            unregisterReceiver(receiver = networkChangeReceiver)
        }
    }

NetworkChangeReceiver.kt

class NetworkChangeReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context?, intent: Intent?) {
          Log.e("network changed")
    }

}

問題はありません。しかし、私のkotlinプラグインは次のエラーを表示します:

次の関数はいずれも、引数を指定して呼び出すことはできません

ここに画像の説明を入力

最初の引数に指定された引数は正しい ASAFIK です。私は Kotlin の専門家ではなく、楽しみのために学んでいます。これは Kotlin の意図した動作ですか、プラグインのエラーですか、それとも何か不足していますか? 誰でも説明できますか?

4

1 に答える 1

3

最初にパラメーターに名前が付けられますがfilterintentFilterこれを修正すると、別のエラーが発生します。「名前付き引数は、Kotlin 以外の関数では許可されていません」というのは、この理由は、メソッドpublic Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter)が Android からのものであり、Java で記述されているためです。名前の削除はうまくいくはずです:

registerReceiver(
            networkChangeReceiver,
            IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
    )
于 2016-12-16T22:37:19.083 に答える