« android版「コトバトコ」できました | メイン | 「Facebookページプロフェッショナルガイド」が出ます!! »

2011年6月 2日

Javaのイベントリスナをどう書く?

androidのアプリ開発をしてると、画面のUI部品のイベントを受け取るイベントリスナを書くことになるわけですが、これ、書き方によっては、やたらonCreateメソッドが長くなっちゃっていやだーなと思っていたのです。

で、調べてみたら、

blog lesson 01 - Javaのイベントリスナの書き方についての考察

こんなエントリを見つけました。
でも、どれもonCreateの中に書いてあって、やっぱ、そういうもんなのかなーと思ったりもしたのですが、Facebookで友人に教えてもらいつつ、外側に出す方法を考えてみました。

private OnClickListener myListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        // ボタンクリックの処理
    }
};

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
 
    findViewById(R.id.button1).setOnClickListener(myListener);
    findViewById(R.id.button2).setOnClickListener(myListener);
    findViewById(R.id.button3).setOnClickListener(myListener);
}

まず、変数自体をonCreateの外に出しちゃう。
すっきりする!!

private class MyOnClickListener implements OnClickListener {
    @Override
    public void onClick(View v) {
        // ボタンクリックの処理
    }
}

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
 
    findViewById(R.id.button1).setOnClickListener(new MyOnClickListener());
}

これは、それぞれのリスナをクラスとして定義しちゃう。
個々のイベントを扱うクラスがたくさんできちゃうけど、メンテナンス性は良さそう。

Javaだとこういうときどう書いたらいいのかわからないの......。
どこかにベストプラクティス的なものありませんかねぇ。

投稿者 CHEEBOW : 2011年6月 2日 16:52 このエントリーを含むはてなブックマーク

[ android ]
【お知らせ】音楽に関することはこちらのブログで書いています。くじら音楽部::BLOG

トラックバック

このエントリーのトラックバックURL:

このエントリーを含むはてなブックマーク

コメント:

設計にはベストというのは無いと思うのですが、
例えば処理の長さや、処理の再利用性をどこまで考えるかによるのかなと。

処理がそれなりに短かくてそこだけで使えればよければ、リンク先の記事の、②の方法を僕は取りますね。

listenerを使い回したいときは、③、④の方法も使いますね。③と④は再利用性のスコープがそれぞれクラス内、メソッド内の違いですよね。

で、リンク先にないのですが、処理がそれなりに長い、とか、再利用をクラス内とかじゃない場合は、リスナーそのものをクラスとして定義しますね。

プロジェクトの規模がでかい場合も、一番最後の方針を割と僕は使います。

投稿者 yamashiro : 2011年6月 2日 17:42

誤解をうみそうだったので、僕の最後のやつは、別のpublicクラスとしてリスナーを定義して、別ファイルにしちゃうってことですたい。

投稿者 yamashiro : 2011年6月 2日 17:44

>yamashiro
なるほど! ありがとうございます!
リスナって、詰め込むといくらでも詰め込めちゃうので(クリックでダイアログ出して、そのダイアログの結果で処理して)、そのあたりの切り出しも含めて考えたほうがいいですね。
いろいろ試行錯誤してみますー!

投稿者 CHEEBOW Author Profile Page : 2011年6月 6日 10:28

コメントしてください




保存しますか?