独自リスナーの作り方
はじめに
あるクラスで処理を行ってその結果をActivityや別クラスに通知したい場合、どのようにすればよいか。 本記事では、独自でリスナーを作り、それを特定のクラスで受け取る例を書いていきます。
リスナーとは
あるイベントが発生してくれたことを通知してくれるもの。
登場人物
リスナー
イベント発生通知をしてくれる。インターフェース
イベントの通知元と通知先の仲介役。基本的にインターフェースを通して通知先に通知する。レシーバー
イベントを受け取る。
具体例
Calculation
public class CalculationListener { private ResultInterface listener; public Calculation(ResultInterface listener) { this.listener = listener; } public void calc(int a, int b) { int sum = a + b; this.listener.result(sum); } }
ResultInterface
public interface ResultInterface { void result(int sum); }
MainActivity
public class MainActivity extends AppCompatActivity implements ResultInterface { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Calculation obj = new CalculationListener(this); obj.calc(10,20); } @Override public void result(int sum) { String msg = String.valueOf(sum); Log.d("MainActivity", msg); } }
もしくは
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Calculation obj = new CalculationListener(new ResultInterface() { @Override public void result(int sum) { String msg = String.valueOf(sum); Log.d("MainActivity", msg); } }); obj.calc(10,20); } }
結果
MainActivity: 30
解説
上記コードにおける、登場人物。
- リスナー → CalculationListener
- インターフェース → ResultInterface
- レシーバー → MainActivity
ポイント
- CalculationListenerオブジェクト生成時、リスナー(CalculationListener)に通知先(MainActivity)を教えておく。
- CalculationListenerで計算したあと、インタフェースを通して通知先に計算結果を教えてくれる。
まとめ
MainActivityを自分自身だとすると、
自分の連絡先を警察に教えておき、財布がみつかったら教えた連絡先に電話してください。
のような感じ。