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 để làm một công việc gì đó ! Ví dụ như click button để xuất lên màn hình một dòng thông báo chả hạn. Vậy hôm nay các bạn hãy cùng Lập trình không khó đi tìm hiểu các cách bắt sự kiện click cho button nhé !
Giới thiệu sự kiện click button
Button là một View nhưng chúng có thể cho phép ta tương tác bằng cách bấm vào nó. Nhưng trước khi bạn muốn button nhận biết sự kiện click thì các bạn phải bắt sự kiện click cho button đó.
Các cách bắt sự kiện click
1.Cách bắt sự kiện cho một button
Đầu tiên mình sẽ tạo ra một button 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/bnt_click" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click" /> </LinearLayout>
Ở button trên mình sẽ đặt cho nó một cái id là bnt_click
để chúng ta có thể tìm lại được nó trong activity.
Trong activity chúng ta sẽ tìm lại button click bằng id:
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.bnt_click); //Tìm lại button } }
a) Bắt trực tiếp
Để bắt trực tiếp chúng ta có thể dùng hàm setOnClickListener()
bằng cách truyền vào một đối tượng OnClickListenr.
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.bnt_click); //Tìm lại button button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(MainActivity.this,"Bạn đã click",Toast.LENGTH_SHORT).show(); } }); } }
Ở trong hàm setOnClickListener chúng ta sẽ tạo mới một đối tượng OnClickListener. Bạn có thể sử dụng tổ hợp phím ctrl + space Android sẽ tự động gợi ý là View.OnClickListener. Sau khi bạn nhấn enter để chọn thì nó sẽ tự động override lại phương thức onClick cho chúng ta.
Trong hàm onClick chúng ta sẽ xuất ra màn hình một đoạn toast bằng hàm Toask.makeText() . Trong đó tham số đầu tiên chính là biến ngữ cảnh, ở đây chính là lớp MainActivity. Tham số thứ hai chính là đoạn text sẽ hiển thị lên màn hình. Tham số thứ ba chính là thời gian show lên màn hình, ở đây các bạn nên dùng LENGTH_SHORT (xuất trong thời gian ngắn) hoặc LENGTH_LONG (xuất trong thời gian dài).
Như vậy mỗi khi bạn nhấn vào button thì ứng dụng của chúng ta sẽ hiện một thông báo lên màn hình.
b) Bắt trong xml
Ngoài cách trên các bạn có thể tự thêm sự kiện onClick trong chính file 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="ThongBao" android:id="@+id/bnt_click" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click" /> </LinearLayout>
Sau khi bạn thêm sự kiện onClick như vậy, thì ở chỗ “ThongBao” sẽ bị đỏ lên. Các bạn chỉ cần gõ alt + enter và chọn Create ‘ThongBao(View)’ in ‘MainActivity’ là sẽ hết đỏ ngay. Sau khi chọn như vậy bên activity sẽ tự động tạo một hàm như sau:
public void ThongBao(View view) { }
Nhiệm vụ của chúng ta là xuất đoạn toast bên trong hàm này.
public void ThongBao(View view) { Toast.makeText(MainActivity.this,"Bạn đã click",Toast.LENGTH_SHORT).show(); }
Với cách này thì có vẻ đơn giản hơn phải không nào ! Nhưng mình khuyên các bạn không nên dùng cách này.
2.Cách bắt sự kiện cho nhiều button
Vậy nếu các bạn muốn bắt sự kiện cho nhiều button thì sao ? Không lẽ chúng ta cứ tạo các đối tượng OnClickListener trong hàm setOnClickListener. Nếu làm như vậy thì code chúng ta dài và khá rối.
Để giải quyết vấn đề này thì bạn chỉ cần implements interface View.OnClickListener. Sau đó các bạn override lại phương thức onClick bằng cách nhấn alt + enter và chọn Implement methods.
public class MainActivity extends AppCompatActivity implements View.OnClickListener { 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.bnt_click); //Tìm lại button } @Override public void onClick(View view) { } }
Vậy bây giờ phải bắt sự kiện onClick như thế nào ? Đơn giản các bạn chỉ cần truyền vào hàm setOnClickListener tham số this (chính là lớp mainActivity của chúng ta).
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 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.bnt_click); //Tìm lại button button.setOnClickListener(this); } @Override public void onClick(View view) { Toast.makeText(MainActivity.this,"Bạn đã click",Toast.LENGTH_SHORT).show(); } }
Mà khoan, vậy làm sao chúng ta có thể phân biệt được các button khác nhau ? Các bạn sẽ thấy hàm onClick có đối tượng view, đơn giản chúng ta sẽ dùng đối tượng này để phân biệt các button khác nhau. Các bạn có thể dùng thuộc tính id để phân biệt các button.
@Override public void onClick(View view) { if(view.getId() == R.id.bnt_click){ Toast.makeText(MainActivity.this,"Bạn đã click",Toast.LENGTH_SHORT).show(); } }
Các bạn có thể tự tạo thêm một button nữa và sẽ bắt sự kiện onClick cho hai button đó, với mỗi button sẽ xuất ra một thông báo khác nhau nhé !
Bài viết của mình đến đây cũng xin được phép kết thúc. Cám ơn các bạn đã theo dõi !
Để lại một bình luận