(Android) ボタンをクリックした時の実装方法
いろいろな方法があるのでまとめてみました。
実装パターンとしては以下の4つが考えられますが、1と2以外はほとんど使わないと思います。
- Activityに実装(implements View.OnClickListener)
- Layoutファイルにメソッド指定(android:onClick)
- 無名クラス
- 有名クラス
Activityに実装
(main.xml)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:text="Button" android:id="@+id/button" android:layout_height="wrap_content" android:layout_width="match_parent" /> </LinearLayout>
(ソース)
public class ButtonOnClick extends Activity implements View.OnClickListener { private Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button = (Button)findViewById(R.id.button1); button.setOnClickListener(this); } @Override public void onClick(View v) { switch(v.getId()) { case R.id.button: Toast.makeText(ButtonOnClick.this, "Hello! Android!!", Toast.LENGTH_LONG).show(); break; } } }
Layoutファイルにメソッド指定
(main.xml)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:text="Button" android:id="@+id/button" android:layout_height="wrap_content" android:layout_width="match_parent" android:onClick="showToast" /> </LinearLayout>
(ソース)
public class ButtonOnClick extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void showToast(View view) { Toast.makeText(ButtonOnClick.this, "Hello! Android!!", Toast.LENGTH_LONG).show(); } }
無名クラス
(main.xml)
「Activityに実装」と同じ
(ソース)
public class ButtonOnClick extends Activity { private Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button = (Button)findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(ButtonOnClick.this, "Hello! Android!!", Toast.LENGTH_LONG).show(); } }); } }
有名クラス
(main.xml)
「Activityに実装」と同じ
(ソース)
public class ButtonOnClick extends Activity { private Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button = (Button)findViewById(R.id.button); button.setOnClickListener(new onClickButton(this)); } } class onClickButton implements OnClickListener { private Context _context; public onClickButton(Context context) { _context = context; } @Override public void onClick(View v) { Toast.makeText(_context, "Hello! Android!!", Toast.LENGTH_LONG).show(); } }
まとめ
ソースの見易さを考えると、「1. Activityに実装」が良いと思います。
でも個人的にはコーディング量が少ないので、「2. Layoutファイルにメソッド指定」で書くことが多かったりします。