#はじめに
あるクラスで処理を行ってその結果を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を自分自身だとすると、自分の連絡先を警察に教えておき、財布がみつかったら教えた連絡先に電話してください。
のような感じ。