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
を使用していたそのため、購読処理をメソッド呼び出しのためだけに利用するのは適切ではないと判断し、このアプローチを取りませんでした。