[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

シェアする

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

フォローする