*の方向性はどうでもいい

プログラミングなどの学習履歴として最初は書いてたけどもう何でもいいやと思って今に至る

AndroidのOnClickListenerについて

 なんでもそうですが、普段習慣としていること以外に取り組もうとすれば知らないことが当然でてきます。

今回私がAndroidで知らなかったことはOnClickListenerの実装方法が少し変わっているということでした。

 

ボタンのレイアウトがこんな感じです。

  1. <Button
  2. android:layout_height="match_parent"
  3. android:layout_width="wrap_content"
  4. android:id="@+id/button1"
  5. android:layout_weight="1"
  6. android:layout_margin="6dp"/>

 

それで下がJava側での実装です。

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. requestWindowFeature(Window.FEATURE_NO_TITLE);
  5. setContentView(R.layout.stage_select);
  6. // xmlのbutton1を引っ張ってきて、javaのbutton1に入れる処理
  7. Button button1 = (Button) findViewById(R.id.button1);
  8. //何かがクリックされた時に行う処理を定義
  9. View.OnClickListener listener = new View.OnClickListener() {
  10. @Override
  11. public void onClick(View view) {
  12. Intent intent = new Intent(MainActivity.this, SubActivity.class);
  13. intent.putExtra("Level", ((Button) view).getText());
  14. startActivity(intent);
  15. //finish(); //個人的にはfinish()してしまいたい。
  16. }
  17. };
  18. //上で定義したlistenerはbutton1がクリックされた時に行って欲しい処理なので、
  19. //button1にセットする。
  20. button1.setOnClickListener(listener);
  21. }

 

何がダメなのかというとコードが冗長すぎることです。

もっと短くできるのにできてないんです。

だから以下のように変えます。

 

  1. <Button
  2. android:layout_height="match_parent"
  3. android:layout_width="wrap_content"
  4. android:id="@+id/button1"
  5. android:layout_weight="1"
  6. android:layout_margin="6dp"
  7. android:onClick="onClick"/>

 

  1. public void onClick(View view){
  2.  switch(view.getId()){
  3.  case R.id.button1:
  4. Intent intent = new Intent(MainActivity.this, SubActivity.class);
  5. intent.putExtra("Level", ((Button) view).getText());
  6. startActivity(intent);
  7. }
  8. }

 

短くなった上に見やすくなりました。

Androidを仕事で使われている方にとっては当たり前の作法なのでしょうが、

これを知った時は知れたことが嬉しかったです。