Activityで定義したメソッドをAdapterで呼び出す方法(interfaceを使用)

KotlinのActivityで定義したメソッドをAdapterから呼び出すには?Interfaceを活用した最適な実装方法を、コード例と共に解説!

はじめに

今回は、Androidアプリ開発(Kotlin)における、で定義したメソッドをから呼び出す方法に関して書いていこうと思います。具体的な実装としては、メソッドが走るタイミングで、で定義したメソッド(Fragmentを表示する)を呼び出すというものになります。
少々前置きが長いため、実装方法について見たい方はこちらをタップ!

背景

で定義したメソッドをで呼び出したい時、interfaceを使う以外のアプローチとして、
  1. を使って行う方法
  1. を使って行う方法
  1. グローバル変数をメソッド呼び出しのキッカケとする方法
などがあると考えましたが、以下の理由から、今回はを使用して実装しました。

を使ってメソッドを呼び出すアプローチを取らなかった理由

のGlobalScopeはのライフサイクルに依存せず動くため、親となるのGlobalScopeを付与し、下のに親のScopeを持たせ、メソッドを走らすタイミングをGlobalScopeで管理しようと考えました。
しかし、に変更し親のScopeを継承すると、でUI(Fragment)を表示するメソッドが呼び出せなくなってしまうため、この方法を取りませんでした。

を使って行う方法を取らなかった理由

次に、LiveDataを使って値の購読処理を行い、値の変更を検知した際にで定義したメソッドを呼び出す方法を検討しました。具体的な流れは、で値の購読処理を記述し、でボタンが押されたタイミングで購読している値を変更する。値が変更されたら、で定義したメソッドを呼び出すというものです。
通常、LiveDataオブジェクトは ViewModelオブジェクトに格納するのが一般的ですが、今回は
  • ViewModelオブジェクトを返さず、を使用していた
  • 購読したい値は無かった
そのため、購読処理をメソッド呼び出しのためだけに利用するのは適切ではないと判断し、このアプローチを取りませんでした。
しかし、ViewModelオブジェクトを使用してを実装しており、
  • 内のデータ変更を検知して、Activityからメソッドを呼び出したい場合
  • UIをデータの状態と一致させたい場合
は導入も手軽ですので、良い実装方法だと考えています。

グローバル変数をメソッド呼び出しのキッカケとするアプローチを取らなかった理由

最も単純な実装方法ですが、常にグローバル変数としてメモリを使用するため、このアプローチは取りませんでした。

実装の流れ

前置きが長くなってしまいましたが、実装について書いていきます。

Step1:interfaceを作成する

example:

Step2:Activityクラスにinterfaceを継承し、定義したいメソッドを記述する

example:
  • Activity.kt

Step3:interface呼び出しに関する部分を追記

まず、Adapterクラスにinterfaceに関する処理を追記します。
example:
  • Adapter.kt
次は、ActivityクラスのAdapterを呼び出している部分に追記します。
example:
  • Activity.kt

Step4:Adapterクラスの任意の箇所でメソッドを呼び出す

example:
  • Adapter.kt

おわりに

最後まで読んでいただきありがとうございました😄

【おまけ】Java, Kotlinコード比較

java

  • MyAdapter.java

Kotlin

  • MyAdapter.kt

参考

💡
この記事はこちらのクロスポストになります

署名2025/3/3 16:552025/4/1 23:47