ボタンをクリックしたら○○する〜というのを書いてみます。
作ってみる
プロジェクトの作成
新規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の方がなんとなく好き。