liguofeng29’s blog

個人勉強用ブログだっす。

Androidのイベント処理 - 外部クラスでリスナー生成

①外部クラスでリスナーを生成し
②リスナーをViewに登録する。

一般的には外部クラスでリスナー生成はしない。


理由としては主に
①イベントは特定のGUI画面に所属するものなので、外部クラスにするのは集約面でよくない
②外部クラスでリスナーを生成すると自由にEventSource内のコンポーネントに自由のアクセスできない場合が多々あるので、
コーディング面でよくない

*Layoutは省略。

OuterClassEvent.java
 
package com.example.liguofeng.outerclassevent;

import android.app.Activity;
import android.view.View;
import android.widget.Toast;

// ①外部クラスでリスナー
public class OuterClassEvent implements View.OnClickListener {

Activity act;
public OuterClassEvent(Activity act) {
this.act = act;
}
@Override
public void onClick(View v) {
Toast.makeText(act,
"外部クラスで生成されたリスナーです。", Toast.LENGTH_SHORT).show();
}
}
 
MainActivity.java
 
package com.example.liguofeng.outerclassevent;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
Button outerClassBtn;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

outerClassBtn = (Button) findViewById(R.id.outerClassBtn);
outerClassBtn.setOnClickListener(new OuterClassEvent(this)); // ② リスナー設定
}
}