AndroidのOnClickListenerについて
なんでもそうですが、普段習慣としていること以外に取り組もうとすれば知らないことが当然でてきます。
今回私がAndroidで知らなかったことはOnClickListenerの実装方法が少し変わっているということでした。
ボタンのレイアウトがこんな感じです。
<Button
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:id="@+id/button1"
android:layout_weight="1"
android:layout_margin="6dp"/>
それで下がJava側での実装です。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.stage_select);
// xmlのbutton1を引っ張ってきて、javaのbutton1に入れる処理
Button button1 = (Button) findViewById(R.id.button1);
//何かがクリックされた時に行う処理を定義
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, SubActivity.class);
intent.putExtra("Level", ((Button) view).getText());
startActivity(intent);
//finish(); //個人的にはfinish()してしまいたい。
}
};
//上で定義したlistenerはbutton1がクリックされた時に行って欲しい処理なので、
//button1にセットする。
button1.setOnClickListener(listener);
}
何がダメなのかというとコードが冗長すぎることです。
もっと短くできるのにできてないんです。
だから以下のように変えます。
<Button
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:id="@+id/button1"
android:layout_weight="1"
android:layout_margin="6dp"
android:onClick="onClick"/>
public void onClick(View view){
switch(view.getId()){
case R.id.button1:
Intent intent = new Intent(MainActivity.this, SubActivity.class);
intent.putExtra("Level", ((Button) view).getText());
startActivity(intent);
}
}
短くなった上に見やすくなりました。
Androidを仕事で使われている方にとっては当たり前の作法なのでしょうが、
これを知った時は知れたことが嬉しかったです。