2014年4月27日日曜日

【Android、4.x】ボタンがクリックされたときに○○する

※Android4.0以降で確認してます。それ以前で使えるかは調べてません。

ボタンをクリックしたら○○する〜というのを書いてみます。

作ってみる

プロジェクトの作成

新規Androidプロジェクトを適当に

ボタンの配置

デフォルトで作られる"activity_main.xml"を編集
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="HelloWorld" />

</RelativeLayout>
これで画面上にボタンが出来る。

クリックを受け取る

ボタンなどのクリックできるクラスにはsetOnClickListenerというメソッドが用意されてる。(継承元のViewクラスのメソッドだけど。)
このメソッドの引数にView.OnclickListener型のインスタンスを渡せばOK)

やり方は2つ。

1つ目:Activity自身にOnClickListenerを実装する

こんな感じ。
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);  
  
  View btn = findViewById(R.id.btn);
  btn.setOnClickListener(this);
 }

 @Override
 public void onClick(View v) {
        Toast.makeText(this, "HelloWorld", Toast.LENGTH_LONG).show();
 }
}
MainActivity自身がView.OnclickListenerインターフェイスを継承することで
setOnClickListenerメソッドの引数に自身(this)を渡してしまおうという作戦。
クリックされたときはMainActivityのonClickが呼ばれる。

2つ目:匿名クラスを使う

MainActivityでOnClickListenerを継承するんじゃなく
メソッド内で名前を持たないクラスを書いてしまう方法
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);  
  
  View btn = findViewById(R.id.btn);
  
  OnClickListener listener = new OnClickListener() {
   @Override
   public void onClick(View v) {
          Toast.makeText(v.getContext(), "HelloWorld", Toast.LENGTH_LONG).show();
   }
  };
  
  btn.setOnClickListener(listener);
 }

}
見やすくするためにlistenerという変数を用意したけど
setOnClickListener()の括弧内に全部書いちゃう事も可能。


どっちがいいんだろうね。
自分は2の方がなんとなく好き。

スポンサーリンク

Related Posts Plugin for WordPress, Blogger...