AndroidとiPhoneのイベントハンドラの実装方法を比較する
両者の大きな違いはiPhoneはInterface Builderでイベントの定義ができるのに対しAndroidはレイアウトXMLでイベントの定義ができないところです。
またiPhoneはselectorという関数ポインタに似た仕組みがあるのでコード上でも割と簡単にイベントの定義ができるのに対し、Androidはイベントリスナーを実装する以外の実装方法がありません。これはAndroid,iPhone云々というよりは言語依存によるところが大きいです。
iPhone
- Interface Builderを使う場合
Interface Builderでボタンとイベントの紐付きを設定する(省略)@interface HogeViewController : UIViewController { } - (IBAction) onClick:(id)sender; @end @implementation - (IBAction) onClick:(id)sender { // クリック時の処理 } @end
- Interface Builderを使わない場合
@implementation HogeViewController synthesize button; - (void)viewDidLoad { [super viewDidLoad]; [button addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside]; } - (IBAction) onClick:(id)sender { // クリック時の処理 } @end
Android
- レイアウトXMLでイベントとViewの紐付きを定義できない
public class HogeActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.button); button.setText("Push"); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { // クリック時の処理 } }); } }