Android アプリを作るときに使う interface の具体的な例を紹介していきたいと思います。
interface の例
各種リスナー
- OnClickListener
- OnLongClickListener
- OnTouchListener
このあたりのリスナーはView.java
で定義されています。
AndroidStudioなら、command + B
でクラスに定義されている場所に飛べるので、確認してみてください。
イベントリスナーと言われたりします。
スレッド
- Runnable
マルチスレッドでプログラミングするときに使います。
参考: Android Developer プロセスとスレッド
書き方の例
OnClickListenerを例に紹介していきます。
匿名クラスを引数として渡す
Viewクラスの、setOnClickListenerメソッドに引数として interface を渡します。
Button button = new Button(this);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// button がクリックされた時の処理
}
});
事前に変数に代入しておくこともできます。(やりませんが....)
Button button2 = new Button(this);
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
// button がクリックされた時の処理
}
};
button2.setOnClickListener(onClickListener);
ラムダ式を使う
準備
Java8 で実装された、新しい文法であるラムダをAndroid で使うには準備が必要になります。
こちらのサイトを参考に、
android {
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
以上の2箇所を書き加えます。
このとき gradle-wrapper.properties で、gradle のバージョンが、2.1.0以上になっていることがが必要です。
ラムダ式で書く
Button button3 = new Button(this);
button3.setOnClickListener((View v)->{
// button がクリックされた時の処理
});
最後に
「どうやって書くのがいいのか?」に対する明確な答えはなさそうです。
少し古い記事になりますが、
個人的には匿名クラスで書くのが好きで、AcitivytやFragmentにimplementsするのはあんまり好きじゃないです (オブジェクト指向的に変な気がするので...)