KotlinのActivityで定義したメソッドをAdapterから呼び出すには?Interfaceを活用した最適な実装方法を、コード例と共に解説!
今回は、Androidアプリ開発(Kotlin)における、Activityで定義したメソッドをAdapterから呼び出す方法に関して書いていこうと思います。具体的な実装としては、ListAdapterのsetOnClickListenerメソッドが走るタイミングで、Activityで定義したメソッド(Fragmentを表示する)を呼び出すというものになります。
少々前置きが長いため、実装方法について見たい方はこちらをタップ!
Activityで定義したメソッドをAdapterで呼び出したい時、interfaceを使う以外のアプローチとして、
Coroutineを使って行う方法LiveDataを使って行う方法などがあると考えましたが、以下の理由から、今回はinterfaceを使用して実装しました。
Coroutineを使ってメソッドを呼び出すアプローチを取らなかった理由CoroutineのGlobalScopeはActivityのライフサイクルに依存せず動くため、親となるActivityにCoroutineのGlobalScopeを付与し、Adapter下のCoroutineに親のScopeを持たせ、メソッドを走らすタイミングをGlobalScopeで管理しようと考えました。
しかし、Adapterをabstract classに変更し親のScopeを継承すると、ActivityでUI(Fragment)を表示するメソッドが呼び出せなくなってしまうため、この方法を取りませんでした。
LiveDataを使って行う方法を取らなかった理由次に、LiveDataを使って値の購読処理を行い、値の変更を検知した際にActivityで定義したメソッドを呼び出す方法を検討しました。具体的な流れは、Activityで値の購読処理を記述し、Adapterでボタンが押されたタイミングで購読している値を変更する。値が変更されたら、Activityで定義したメソッドを呼び出すというものです。
通常、LiveDataオブジェクトは ViewModelオブジェクトに格納するのが一般的ですが、今回は
Adapterを使用していたそのため、購読処理をメソッド呼び出しのためだけに利用するのは適切ではないと判断し、このアプローチを取りませんでした。