Activityで定義したメソッドをAdapterで呼び出す方法(interfaceを使用)
KotlinのActivityで定義したメソッドをAdapterから呼び出すには?Interfaceを活用した最適な実装方法を、コード例と共に解説!
はじめに背景Coroutineを使ってメソッドを呼び出すアプローチを取らなかった理由LiveDataを使って行う方法を取らなかった理由グローバル変数をメソッド呼び出しのキッカケとするアプローチを取らなかった理由実装の流れStep1:interfaceを作成するStep2:Activityクラスにinterfaceを継承し、定義したいメソッドを記述するStep3:interface呼び出しに関する部分を追記Step4:Adapterクラスの任意の箇所でメソッドを呼び出すおわりに【おまけ】Java, Kotlinコード比較javaKotlin参考
はじめに
今回は、Androidアプリ開発(Kotlin)における、で定義したメソッドをから呼び出す方法に関して書いていこうと思います。具体的な実装としては、のメソッドが走るタイミングで、で定義したメソッド(Fragmentを表示する)を呼び出すというものになります。
少々前置きが長いため、実装方法について見たい方はこちらをタップ!
背景
- を使って行う方法
- を使って行う方法
- グローバル変数をメソッド呼び出しのキッカケとする方法
などがあると考えましたが、以下の理由から、今回はを使用して実装しました。
を使ってメソッドを呼び出すアプローチを取らなかった理由
の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
参考
小幡 十矛(Obata Tomu)|価値を共創するエンジニア
東京を拠点に、アプリ開発・新規事業立ち上げ・ブランドづくりに取り組んでいます。
2021年にサイバーエージェントへ新卒入社後、ABEMA Live や AmebaブログのiOSアプリ開発を担当。
現在はフリーランスとして、複数の新規プロダクトやリアル店舗の立ち上げに挑戦中です。
🎯 Mission|人の挑戦を加速する仕組みをつくる
── アイデアを形にし、前に進める“土台”や“場”を共創する
📌 「リアルな場 × デジタル」の可能性を探求し、新しい挑戦が生まれる土壌を育てる
🔹 エンジニアリング × ビジネスの視点から、アイデアを形にし、成長を支えていく
🔹 実店舗オーナーを目指し、オーダースーツ・ドライヘッドスパ・セレクトショップの複合店舗の立ち上げにも挑戦中
👥 特に、社会人1〜5年目くらいで
「やりたい気持ちはあるけど、最初の一歩に迷っている」方へ。
「自分の可能性をもっと広げたい」
「モヤっとしたアイデアがあるけど、どう進めていいかわからない」
そんなフェーズにいる方と、一緒に考えたり、手を動かしたりできたら嬉しいです。
🌱 「挑戦したい20代」との出会いも、大切にしています。
「ちょっと話してみたいな」くらいの気持ちで、気軽に声をかけてもらえたら嬉しいです!🙌
🌐 詳しいプロフィールはこちら
https://obata-tomu.jp/