trong android có nhiều cách bắt sự kiện click. Mỗi cái có 1 cái hay riêng. Bài này sẽ điểm qua từng kiểu bắt sự kiện click cho view android

3 phương pháp bắt sự kiện click cho view android

2021-03-31 3528 lượt xem

Chắc hẳn khi mới bắt đầu lập trình Android thì các bạn đều tìm hiểu cách click button để bắt 1 sự kiện nào đó. Có nhiều cách bắt sự kiện lắm nhé, và bạn cùng mình tìm hiểu bắt sự kiện trong android nhé.

Giả sử có cái Layout như sau: 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <Button
        android:id="@+id/btn_click"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Bấm em đi anh" />
 
</LinearLayout>
 

Cách bắt idcho một button chuẩn bị cho phần sau

Ở button trên mình sẽ đặt cho nó một cái id là btn_click để chúng ta có thể tìm lại được nó trong activity.

Trong activity chúng ta sẽ tìm button bằng hàm findViewById:

public class MainActivity extends AppCompatActivity {
 
    Button button; //Khai báo một button
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        button = findViewById(R.id.btn_click); //Tìm lại button
    }
}

Bắt trực tiếp

bạn dùng hàm setOnClickListener để set trực tiếp. Phương pháp này trông có vẻ nhìn đáng sợ nhưng là cách làm nhanh tay lẹ mắt nhất trong android. 

public class MainActivity extends AppCompatActivity {
 
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        button = findViewById(R.id.btn_click); //nạp button
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,"Bạn đã click",Toast.LENGTH_SHORT).show();
            }
        });
    }
}

Bắt sự kiện trong XML

Phương pháp này trong có vẻ ngầu ngầu hơn 1 tí và đồng thời nó clean hơn 1 tí. Trông đỡ đáng sợ.

Những thứ bạn cần làm là vào XML khai báo là có cái android:onClick="TEN_FUNCTION" thì trong code java bạn chỉ cần tạo 1 hàm TEN_FUNCTION là xong, lúc click nó sẽ chạy. 

Đặc biệt Phương pháp này khá tiện cho việc kế thừa nhiều view cùng 1 sự kiện click.

Xml như sau: 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <Button
        android:onClick="hamOnClickThongBao"
        android:id="@+id/btn_click"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click" />
 
</LinearLayout>

Sau khi thêm dòng android:onClick="hamOnClickThongBao"  thì trong xml báo lỗi hoặc nếu không báo lỗi thì run code cũng lỗi 😄 , bạn hover vào và bấm override phương thức còn thiếu hamOnClickThongBao thì sẽ ok nhé.

Sau khi nó sinh ra 1 function trong java code thì bạn chỉ bõ code bạn muốn vào trong đó. Như sau: 

public void hamOnClickThongBao(View view) {
        Toast.makeText(MainActivity.this,"Bạn đã click btn hamOnClickThongBao ",Toast.LENGTH_SHORT).show();
    }

Với cách này thì mình không khuyến khích dùng cho lắm.

Bắt sự kiện cho nhiều button

Đôi  khi 1 app mobile có nhiều button cần bắt sự kiện bạn hoàn toàn có thể handle trong cùng 1 hàm. Và mục này dùng cho việc xử lý button dạng như chung: bạn chỉ cần implements interface View.OnClickListener => nó văng lỗi bảo bạn cần phải override method onclick để handle lại sự kiện onclick của interface. 

Lưu ý to bự: Cái view nào bạn muốn nó chạy được sự kiện onclick bạn phải gọi hàm này: button.setOnClickListener(this);

Code java lúc này như sau : 

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
 
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        button = findViewById(R.id.btn_click);
        button.setOnClickListener(this);
    }
 
 
    @Override
    public void onClick(View view) {
        Toast.makeText(MainActivity.this,"Bạn đã click",Toast.LENGTH_SHORT).show();
    }
}
bài viết trong chủ đề