Intent trong android (Bài 4)
Intent trong androidđược dùng để mở một Activity khác và có thể truyền dữ liệu cho Activity được gọi. Một Activity được gọi sau khi kết thúc có thể gửi dữ liệu về cho Activity đã gọi nó.
Intent trong android – Mở một Activity không kiểm soát kết quả trả về
Không truyền dữ liệu cho Activity được gọi
Truyền dữ liệu cho Activity được gọi
Intent trong android – Mở một Activity và xử lý kết quả trả về
Intent trong android – Mở Activity không truyền dữ liệu và không xử lý kết quả trả về
Thiết kế giao diện ứng dụng
Tại Activity 1: Khi người dùng click vào “Mở Activity 2“, ứng dụng sẽ gọi Activity 2 và đóng activity hiện hành (Activity 1).
Tại Activity 2: Khi người dùng click vào “Quay về Activity 1“, ứng dụng sẽ gọi Activity 1 và đóng activity hiện hành (Activity 2).
Viết xử lý:
Viết xử lý cho nút “Mở Activity 2” tại Activity 1 (Phần in đậm là activity được gọi)
Intent it = new Intent(this , Activity2.class); startActivity(it);
Viết xử lý cho nút “Quay về Activity 1” tại Activity 2 (Phương thức finish() sẽ đóng activity hiện tại và quay về activity trước)
finish();
Intent trong android – Mở Activity có truyền dữ liệu và không xử lý kết quả trả về.
Thiết kế giao diện ứng dụng:
Activity_Input có nhiệm vụ tìm số nhỏ nhất trong 2 số và gửi kết quả tìm được cho Activity_Result.
Viết xử lý:
- Viết xử lý cho nút “Gửi kết quả” tại Activity_Input
Intent it = new Intent(this, Activity_Result.class);
//Đóng gói dữ liệu để gửi cho Activity_Result
Bundle bundle = new Bundle();
bundle.putFloat("n1", num1);
bundle.putFloat("n2", num2);
it.putExtra("data", bundle);
//Mở Activity_Result
startActivity(it);
- Viết xử lý nhận kết quả tại phương thức onCreate của Activity_Result
Intent it = getIntent();
//Nhận gói dữ liệu từ Activity_Input
Bundle bundle = it.getBundleExtra("data");
//Đọc dữ liệu và gán vào hai biến a và b
float a = bundle.getFloat("n1");
float b = bundle.getFloat("n2");
Intent trong android – Mở Activity và xử lý kết quả trả về
Thiết kế giao diện ứng dụng
Khi người dùng click vào nút “Nhập tên” tại Activity_ShowName, ứng dụng sẽ gọi Activity_InputName. Khi người dùng click vào nút “Hoàn tất“, dữ liệu sẽ được gọi về Activity_ShowName
Viết xử lý cho Activity_ShowName
- Viết xử lý cho nút “Nhập tên” (Lưu ý, số 1 là Request Code – Mã yêu cầu)
// Mở activity khác tại sự kiện click của nút "Nhập tên"
Intent it = new Intent(this, Activity_InputName.class);
startActivityForResult(it, 1);
- Thêm phương thức onActivityResult (Phương thức sẽ xử lý kết quả trả về)và viết xử lý (Trong Android Studio, nhấn tổ hợp phím Alt + Insert -> chọn Override Methods -> chọn onActivityResult -> chọn OK để thêm phương thức)
- Và kết quả thu được
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
- Code hoàn chỉnh của phương thức onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1){
Bundle b = data.getBundleExtra("data");
//Đọc kết quả trả về và gán vào biến strName
String strName = b.getString("name");
}
}
Viết xử lý cho nút “Hoàn tất” tại Activity_InputName
EditText txt = (EditText)findViewById(R.id.txtName);
// Tham chiếu đến intent
Intent it = getIntent();
// Tạo đối tượng để đóng gói dữ liệu
Bundle b = new Bundle();
b.putString("name", txt.getText().toString());
it.putExtra("data", b);
// Gửi lại kết quả cho Activity_ShowName (1 là Result Code)
setResult(1, it);
// Đóng activity hiện tại
finish();
Intent trong android – Ví dụ mẫu
Thiết kế ứng dụng gồm 2 activity. Khi chạy ứng dụng, màn hình đăng ký thông tin sẽ cho phép người dùng nhập tên khách hàng và email. Khi người dùng click nút “Gửi”, những thông tin này sẽ được chuyển đến màn hình thứ hai.
Hình 1: Màn hình đăng ký thông tin
Hình 2: Màn hình hiển thị thông tin đăng ký
Tạo 2 activity tương ứng cho hai màn hình
Chuột phải package -> chọn New -> chọn Activity -> chọn Empty Activity.
Activity thứ nhất đặt tên là SignUpActivity, activity thứ hai đặt tên là WelcomeActivity
Thiết kế giao diện ứng dụng
- Màn hình đăng ký thông tin SignUpActivity (Hình 1)
- Màn hình hiển thị thông tin WelcomeActivity (Hình 2)
Viết xử lý
- Code hoàn chỉnh của SignUpActivity (Lưu ý chỉ định phương thức signUpAction cho thuộc tính onClick ở layout)
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class SignUpActivity extends AppCompatActivity {
EditText etTenKH;
EditText etEmail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_up);
etTenKH = (EditText) findViewById(R.id.etTenKH);
etEmail = (EditText) findViewById(R.id.etEmail);
}
public void signUpAction(View v) {
Bundle b = new Bundle();
b.putString("tenKH", etTenKH.getText().toString());
b.putString("email", etEmail.getText().toString());
Intent i = new Intent(this, WelcomeActivity.class);
i.putExtra("data", b);
startActivity(i);
}
}
- Code hoàn chỉnh của WelcomeActivity
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class WelcomeActivity extends AppCompatActivity {
TextView tvTenKH;
TextView tvEmail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
tvTenKH = (TextView) findViewById(R.id.tvTenKH);
tvEmail = (TextView) findViewById(R.id.tvEmail);
Intent i = getIntent();
Bundle b = i.getBundleExtra("data");
String strTenKH = b.getString("tenKH");
String strEmail = b.getString("email");
tvTenKH.setText(tvTenKH.getText().toString() + strTenKH);
tvEmail.setText(tvEmail.getText().toString() + strEmail);
}
}
Intent trong Android – Bài tập thực hành
Xây dựng ứng dụng đặt thức ăn và thức uống gồm 3 activity. Giao diện của MainActivity
FoodActivity: được gọi khi người dùng touch (chạm) vào nút lệnh “Chọn thức ăn”, hiện giao diện liệt kê 4 bón ăn: Phở Hà Nội, Bún Bò Huế, Mì Quảng, Hủ Tíu Sài Gòn và cho phép người dùng lựa chọn. Khi người dùng đã chọn một món ăn và touch vào nút “Đặt món”, ứng dụng sẽ đóng FoodActivity và gửi tên món ăn về MainActivity để cập nhật tên món ăn đã chọn.
DrinkActivity: được gọi khi người dùng touch (chạm) vào nút lệnh “Chọn đồ uống”, hiện giao diện liệt kê 4 thức uống: Pepsi, Heineken, Tiger, Sài gòn Đỏ và cho phép người dùng lựa chọn. Khi người dùng đã chọn một đồ uống và touch vào nút “Đặt món”, ứng dụng sẽ đóng DrinkActivityvà gửi tên món ăn về MainActivity để cập nhật tên đồ uống đã chọn.