Intent trong android (Bài 4)

Intent trong android. Trong Android, intent đượ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 – Dùng Intent để mở một Activity khác nhưng không kiểm soát kết quả trả về

Không truyền dữ liệu cho Activity được gọi

intent trong android 1

Truyền dữ liệu cho Activity được gọi

intent trong android 2

Intent trong android – Dùng Intent để mở một Activity khác và xử lý kết quả trả về

intent trong android 3

Intent trong android – Mở Activity khác 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

intent trong android 4

intent trong android 5

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 khác 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:

intent trong android 6

intent trong android 7

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 khác và xử lý kết quả trả về

Thiết kế giao diện ứng dụng

intent trong android 8

intent trong android 9

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)

intent trong android 10

  • 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 (Chú ý đoạn in đậm là đoạn code được bổ sung)
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.

intent trong android

Hình 1: Màn hình đăng ký thông tin

intent trong android 12

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)

intent trong android 13

  • Màn hình hiển thị thông tin WelcomeActivity (Hình 2)

intent trong android 14

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

intent trong android 15

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.

Xem giáo trình lập trình Android cơ bản

Trả lời