[Android] カスタム Listener を interface を使って実装してみる

処理が終わった、モードが変更されたなどを知りたい場合があります。Listenerがもともと存在するAPIであればいいのですが、そういったものがない場合にカスタムでlistenerを実装し通知させることも可能です。
 
1x1.trans - [Android] カスタム Listener を interface を使って実装してみる


Android Studio
2021.2.1

 




custom listener

 
ボタンをユーザーがタップしたのを知るためにlistenerをセットします。同様にあるタスクが終了、あるいは事象が変更されたらお知らせを出すメソッドが実装されているAPIがあります。こういったlistenerをカスタムでつくるためにinterfaceを活用します。

interfaceを実装するときはimplementsを使っています、Buttonがいい例です。


 

 

interface, implements

 
重いタスクをさせて、それが終了したら知らせるという形でクラスを作ってみます。
本来はこういった重いタスクは非同期がいいのですが、ここでは簡略化します。
以下はAsyncTaskでcustom listenerを使った例
 

asynctask 00 100x100 - [Android] カスタム Listener を interface を使って実装してみる
AsyncTask が非推奨になったので代わりに、Executorを使った非同期処理はどう実装するのか見てみます

 
重いタスクとして1〜20までを加算させまてみます(あまり重くないのですが)
 
HeavyTask.java


 
これをMainActivityに実装してみます。


 
ログの結果

 

匿名クラス

 
ボタンでよくやる匿名クラスでの実装
HeavyTask.java


 
MainActivity

 

まとめのコード

 
上の2つの組み合わせ的ですがsetListenerを明示できてわかりやすいのかもしれません
スリープさせて重そうなTaskにして、ボタンタップのタイミングで開始するようにしました。

HeavyTask.java


 
MainActivity.java


 
レイアウトです。HeavyTaskを起動するボタンとその結果を表示するTextViewをおきました。
activity_main.xml


 
strings.xml


 

 
 
References:
Observer Design Pattern in Java
How to create our own Listener interface in android? – Stack Overflow

シェアする

  • このエントリーをはてなブックマークに追加

フォローする