SET SỰ KIỆN ONCLICK CHO NHIỀU BUTTON
Button là một đối tượng rất quan trọng và được dùng phổ biến trong các ứng dụng Android. Các ứng dụng Android dù muốn dù không thì cũng phải sử dụng Button. Khi sử dụng Button, ta cần phải biết cách set sự kiện onClick (khi người dùng chạm vào Button đó). Bài viết này sẽ hướng dẫn các bạn cách ta cài đặt sự kiện đó cho nhiều Button.
Thông thường, đối với một Button ta sẽ set riêng cho nó một sự kiện OnClick riêng biệt. Nhưng trong nhiều trường hợp, ta nên sử dụng chung một hàm OnClick cho nhiều Button. Đây là cách mà ta làm thông thường:
public class MainActivity extends AppCompatActivity { Button btn1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //Xử lý khi người dùng Click vào button1 } }); } }
Câu hỏi đặt ra: Giả sử ta có 5-10 Button thực hiện một chức năng đơn giản thì rất dễ dẫn đến phần code khá dài và lượm thượm. Vì vậy ta cần một hàm onClick tổng quát mà có thể xử lý cùng lúc các Button đó.
Mục lục bài viết:
1. Thiết lập giao diện 12 Button
2. Set sự kiện OnClick tổng quát cho các Button
3. Xử lý code cụ thể cho từng Button tương ứng
1. Thiết lập giao diện 12 Button
Ở đây, chúng ta sẽ lấy ví dụ có 10 Button (có Text là số từ 0 đến 9), 2 Button có chức năng Xoá và Xoá Hết, 1 TextView để hiển thị dữ liệu. Và chúng được thiết kế như sau:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" 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="com.example.baobao.hocwebbuttonsclick.MainActivity" android:background="#ffd3d3"> <TextView android:text="TextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:id="@+id/textView" android:textAlignment="center" android:textSize="24sp" /> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/textView" android:layout_centerHorizontal="true" android:layout_marginTop="38dp"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:text="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button1" android:layout_weight="1" /> <Button android:text="2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button2" android:layout_weight="1" /> <Button android:text="3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button3" android:layout_weight="1" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:text="4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button4" android:layout_weight="1" /> <Button android:text="5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button5" android:layout_weight="1" /> <Button android:text="6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button6" android:layout_weight="1" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:text="7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button7" android:layout_weight="1" /> <Button android:text="8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button8" android:layout_weight="1" /> <Button android:text="9" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button9" android:layout_weight="1" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:text="XOÁ" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/buttonXoa" android:layout_weight="1" /> <Button android:text="0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button0" android:layout_weight="1" /> <Button android:text="XOÁ HẾT" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/buttonXoaHet" android:layout_weight="1" /> </LinearLayout> </LinearLayout> </RelativeLayout>
2. Set sự kiện OnClick tổng quát cho các Button
Android cung cấp cho người lập trình nhiều cách để set sự kiện OnClick. Ở trường hợp này, ta cần implements View.OnClickListener ở phần khai báo lớp class MainActivity. Lúc này, tại dòng này sẽ hiện lỗi đỏ vì ta chưa Override lại hàm onClick. Việc đơn giản là nhấn tổ hợp Alt+Enter chọn Implement Methods và chọn Ok để thêm hàm onClick.
Tiến hành lần lượt ánh và set sự kiện Onclick cho các Button như sau:
button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); ... button1.setOnClickListener(this); button2.setOnClickListener(this); ...
3. Xử lý code cụ thể cho từng Button tương ứng
Như vậy, sau khi setOnClickListener(this) cho tất cả các Button, thì chúng sẽ tự set sự kiện onClick về hàm onClick mà ta đã implement bên trên. Việc cuối cùng là ta cài đặt code cụ thể cho chúng như sau, ở đâu ta sẽ dùng switch-case để xử lý:
@Override public void onClick(View view) { switch (view.getId()) { case R.id.button0: textView.setText(textView.getText().toString()+"0"); break; case R.id.button1: textView.setText(textView.getText().toString()+"1"); break; case R.id.button2: textView.setText(textView.getText().toString()+"2"); break; case R.id.button3: textView.setText(textView.getText().toString()+"3"); break; case R.id.button4: textView.setText(textView.getText().toString()+"4"); break; case R.id.button5: textView.setText(textView.getText().toString()+"5"); break; case R.id.button6: textView.setText(textView.getText().toString()+"6"); break; case R.id.button7: textView.setText(textView.getText().toString()+"7"); break; case R.id.button8: textView.setText(textView.getText().toString()+"8"); break; case R.id.button9: textView.setText(textView.getText().toString()+"9"); break; case R.id.buttonXoa: textView.setText(textView.getText().toString().substring(0,textView.getText().toString().length()-1)); break; case R.id.buttonXoaHet: textView.setText(""); break; } }
Ngoài ra, ta còn có thể áp dụng cách set sự kiện OnClick này cho các đối tượng khác như: ImageView, TextView,…