Set sự kiện Onclick cho nhiều Button

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.

bat-su-kien-trong-listview

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>
set-su-kien-onclick-2-png

Giao diện Set sự kiện Onclick như sau

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.

set-su-kien-onclick-1

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,…

Cảm ơn các bạn đã theo dõi bài viết !