Androidでいきなりエラーが出るようになりました。

Androidでいきなりエラーが出るようになりました。 SurfaceViewを実装したクラスで今までは問題なく動いていたのですが、いきなりエラーが出て困惑しています。 @Override public void run() { while(thread != null){ onDraw(getHolder()); } } private void onDraw(SurfaceHolder holder){ Canvas c = holder.lockCanvas(); if(c == null) return; c.drawColor(Color.WHITE); holder.unlockCanvasAndPost(c); } onDraw(getHolder()); のところにSuspicious method call; should probably call "draw" rather than "onDraw"と出ます。 @SuppressLint("WrongCall")というものを付け足すと問題なく動作するのですが、一体なぜこんなことになるのでしょうか? 先日、誤ってEclipceのフォルダーを消してしまって、再度入れたのですがこれがなんらかの原因なのでしょうか?

補足

Lint 警告のクリアをしたらエラーがでなくなりました。 onDrawという書き方はよくないということでしょうか?

Java5,139閲覧

ベストアンサー

1

想像なんですが、SurfaceViewはViewを継承したクラスで、ViewクラスにはonDrawメソッドが存在します。このonDrawメソッドは、 protected void onDraw(Canvas canvas) という型になっています。同じ名前で引数が異なるメソッドを作るとオーバーロードという格好になりますが、その場合は戻り値の型と可視性(publicとかprivateとか)を一致させる必要があります。ところが、そのコードではそれが守られていないため、問題が生じるのではないでしょうか。特に必要がないのであれば、重複するメソッド名は避けて違う名前にした方が良いのではないかと思います。

1人がナイス!しています

ThanksImg質問者からのお礼コメント

回答ありがとうございました。 特に必要がないので、メソッド名を変更しました。 また一つ勉強になりました。

お礼日時:2013/2/27 18:37