~Listenerというクラスの実装方法は色々あると思いますが、主に利用しているパターンは2つのパターンです。
①無名クラスで実装する方法
②メインとなるクラスにimplementsで実装してしまう方法
他にもちゃんと名前を付けたクラスを定義して実装する方法もありますが使ったことはありません。
実際のコード(例ではシークバーを扱っています)は次のようになります。
①の例
public class ~Activity extends Activity {
:
@Override
protected void onCreate(Bundle savedInstanceState) {
:
seekBar~.setOnSeekBarChangeListener(
new SeekBar.OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
//
}
public void onStartTrackingTouch(SeekBar seekBar) {
//
}
public void onStopTrackingTouch(SeekBar seekBar) {
//
}
}
);
:
}
:
}
②の例
public class ~Activity extends Activity
implements SeekBar.OnSeekBarChangeListener {
:
@Override
protected void onCreate(Bundle savedInstanceState) {
:
seekBar~.setOnSeekBarChangeListener(this);
:
}
:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
//
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
//
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//
switch (seekBar.getId()){
case R.id.seekBar~:
break;
}
}
:
}
好みもありますが、個人的には①のほうがスッキリしていてコードも見やすいので好きなのですが、複数シークバーが有るときにはどうしても助長に見えます。また無名クラスとはいえ内部でクラスが生成されているのも気になります。(Javaが実際にどのように動作しているのかは理解していませんが)
②の場合は一つの時には何も考えなくてもよいのですが、複数ある場合は引数のseekBarを見てどのseekBarなのか判断する必要があります。コードには条件分岐が必要になるので複雑になってしまいます。ただしクラスの生成が発生していない分、余計な生成時間やメモリーがなさそうです。
まだどちらが良い悪いという結論が出せていません。
2015年12月5日土曜日
2015年10月11日日曜日
2015年3月23日月曜日
Singletonパターン
実際に書籍などでデザインパターンに関するものを読んだことは無いのですが、javaを触っていく以上少なからず目を通しておいたほうが良いかもなと感じてはいます。
手持ちのアプリで動作が少々怪しい部分があるのでどうすればその部分を排除できるかという観点に基づいて考えた結果、まずはここからかな?というところでインスタンスが万が一複数できてしまっていたらよくは無いと考え、検索してみてみました。
手持ちのアプリで動作が少々怪しい部分があるのでどうすればその部分を排除できるかという観点に基づいて考えた結果、まずはここからかな?というところでインスタンスが万が一複数できてしまっていたらよくは無いと考え、検索してみてみました。
2015年3月21日土曜日
ExampleAppWidgetProvider.javaのコードバグ
多分すごくどうでもいいことですが気づいたので書いておきます(笑)
後で書くかもしれませんけど、元々はWidgetの挙動がどうしても気に入らないので動作をちょっと細かく見ていたところで気がつきました。
見ることのできるWidgetのコードをコンパイルして動かしたりしていて、やっぱりSDKのコードも見て見ないとダメかなとおもってみたところちょっとした違和感のあるコードが。
後で書くかもしれませんけど、元々はWidgetの挙動がどうしても気に入らないので動作をちょっと細かく見ていたところで気がつきました。
見ることのできるWidgetのコードをコンパイルして動かしたりしていて、やっぱりSDKのコードも見て見ないとダメかなとおもってみたところちょっとした違和感のあるコードが。
2015年1月27日火曜日
動的な配列
ArrayList
ArrayList arrayList = new ArrayList();
arrayList.add("text");
arrayList.add(new Byte(1));
ArrayList arrayList = new ArrayList();
arrayList.add("text");
arrayList.add(new Byte(1));
登録:
投稿 (Atom)