Androidの勉強

久々の日記で、しかも今年最初の日記。


今年は、Androidの勉強をやろうと思ってて、先日

初めてのAndroid 第3版

初めてのAndroid 第3版

を買って、さっそくそれにそって少しずつコーディングのお勉強をやりはじめてみた。


最初の方のサンプルで、昨日はAboutボックスの実装でつまづいた。

public class Sudoku extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        View aboutButton = findViewById(R.id.about_button);
        aboutButton.setOnClickListener(this);
    }

と実装しろ書いてあったけど、そのままだと、コンパイルエラー。
View  |  Android Developers
をみると、引数の変数は View.OnClickListener じゃないとダメって書いてある。


Eclipseの訂正機能が言うには、Castせいって出てたんで、Activityクラスの
サブクラスに View.OnClickListener があるんだなんて思って、若干違和感を感じつつも
実行してみるとClassCastExcption…。


View.OnClickListener  |  Android Developers
を見ると、View.OnClickListenerの親クラスがActivityだなんて一言も書いてない。


ここで、小一時間ほど悩んだ後に、よく見ると View.OnClickListener はインターフェースってことにようやく気づく。


なので、以下のようにして、ようやく解決

public class Sudoku extends Activity implements OnClickListener{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        View aboutButton = findViewById(R.id.about_button);
        aboutButton.setOnClickListener(this);
    }

    public void onClick(View v){
        ....
    }


普段、コーディングしないから、こんな事に気づくのに時間がかかってしまった
自分に反省とスキルの低下をリアルに実感。


ついでに言うと、該当のページの次のページに、ちゃんと言葉で書いてあって
サンプルプログラムのクラス定義の部分もimplementsが追記してあったのに、
この記事を書いてるときに気づいた…。
ちゃんと読めよ、俺。