Xử lý sự kiện trong Layout (Handle event in Layout)
Khi bạn tạo một View trong layout, bất kỳ layout nào cũng sẽ có thuộc tính như sau: android:onClick=”EventName“ , EventName ở đây chính là tên sự kiện, khi người dùng tương tác với view và nó sẽ bắt sự kiện tương ứng với view đó dựa vào ID.
Đây là một view định nghĩa trong layout:
<Button android:id="@+id/btnLogin" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:onClick="clickMe" android:layout_marginTop="52dp" android:text="Login" />
Sau đó ở MainActivity sẽ bắt sự kiện như sau:
package hiepsiit.com; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } // Thêm sự kiện tại đây có tham số là View public void clickMe(View v){ // Hiện thị thông báo trong vòng vài giây Toast.makeText(getApplication(), "Hiệp Sĩ IT: Bạn đang Click vào Butto Login", Toast.LENGTH_LONG).show(); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
Ở file layout mình đã khai báo một sự kiện onClick có tên là “clickMe“ luôn, và trong class MainActivity mình khai báo một phương thức có tên public void clickMe(View v), ở đây các bạn muốn nó bắt sự kiện cho nút button thì bắt buộc phương thức khai báo phải trùng tên với tên onClick trong file layout.
Ở đây mình đã khi báo giống nhau rồi nhé, nhớ tham số truyển vào phương thức là View nhé chứ không có là lỗi ngay.Ngoài ra trong trường hợp có nhiều nút View gán cùng tên sự kiện thì bạn sẽ bắt theo ID như sau:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" 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="hiepsiit.com.MainActivity" > <Button android:id="@+id/btnLogout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/btnLogin" android:layout_alignBottom="@+id/btnLogin" android:layout_centerHorizontal="true" android:onClick="clickMe" android:text="Logout" /> <Button android:id="@+id/btnLogin" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="21dp" android:onClick="clickMe" android:text="Login" /> </RelativeLayout>
Và đây là các bắt sự kiện cho 2 nút button có chung tên sự kiện clickMe:
// Thêm sự kiện tại đây có tham số là View public void clickMe(View v){ // kiem tra bằng dùng phương thức getID() của view so sánh với id của button switch(v.getId()){ case R.id.btnLogin: // Hiện thị thông báo trong vòng vài giây Toast.makeText(getApplication(), "Hiệp Sĩ IT: Bạn đang Click vào Button Login", Toast.LENGTH_LONG).show(); break; case R.id.btnLogout: Toast.makeText(getApplication(), "Hiệp Sĩ IT: Bạn đang Click vào Button Logout", Toast.LENGTH_LONG).show(); break; } }
Toàn bộ code trong MainActivity.java:
package hiepsiit.com; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // Thêm sự kiện tại đây có tham số là View public void clickMe(View v){ // kiem tra bằng dùng phương thức getID() của view so sánh với id của button switch(v.getId()){ case R.id.btnLogin: // Hiện thị thông báo trong vòng vài giây Toast.makeText(getApplication(), "Hiệp Sĩ IT: Bạn đang Click vào Button Login", Toast.LENGTH_LONG).show(); break; case R.id.btnLogout: Toast.makeText(getApplication(), "Hiệp Sĩ IT: Bạn đang Click vào Button Logout", Toast.LENGTH_LONG).show(); break; } } }
Download ví dụ
Ứng dụng này được phát triển bởi adt bundle, android 4.2 sử dụng minimum sdk 11 and target sdk 21.
Kết quả khi click vào button Login:
Kết quả khi click vào button Logout:
Cập nhật công nghệ từ Youtube tại link: https://www.youtube.com/channel/UCOxeYcvZPGf-mGLYSl_1LuA/videos
Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com