Android: Kích hoạt một activity khác

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Video hướng dẫn:

Sau khi hoàn thành bài học trước, bạn có một ứng dụng gồm một activity (một màn hình đơn) với một trường văn bản và một nút. Trong bài học này, bạn sẽ thêm một số lệnh để MainActivity kích hoạt một activity mới để hiển thị thông báo khi người sử dụng nhấn nút Send.

Lập trình hồi đáp nút Send


Thêm một phương thức vào MainActivitylớp được gọi bằng nút như sau:

1. Trong file app > java > com.example.myfirstapp > MainActivity, thêm phương thức sendMessage() như mô tả dưới đây:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /** Được gọi khi người dùng nhấn vô nút Send */
    public void sendMessage(View view) {
        // Do something in
    }
}

Bạn có thể thấy lỗi vì Android Studio không thể giải quyết lớp View được sử dụng làm đối số của phương thức. Vì vậy, bạn hãy nhấp để đặt con trỏ vào phần khai báo View, và sau đó thực hiện một Quick Fix bằng cách nhấn Alt + Enter (hoặc Option + Nhập trên máy Mac). (Nếu một trình đơn xuất hiện, hãy chọn Import class.)

2. Bây giờ trở lại tệp activity_main.xml để gọi phương thức này từ nút:

    1. Nhấp để chọn nút trong Trình chỉnh sửa bố cục.

    2. Trong cửa sổ Attributes, định vị thuộc tính onClick và chọn sendMessage [MainActivity] từ danh sách thả xuống.

Bây giờ khi nhấn nút, hệ thống sẽ gọi phương thức sendMessage().

Lưu ý các chi tiết trong phương thức này được yêu cầu để hệ thống nhận dạng nó tương thích với thuộc tính android:onClick. Cụ thể, phương thức có các đặc điểm sau:

  • Mức truy cập public
  • Kiểu trả về là void
  • View là tham số duy nhất (đó là đối tượng View đã được nhấp vào)

Tiếp theo, bạn sẽ điền vào phương thức này để đọc nội dung của trường văn bản và đưa văn bản đó đến một activity khác.

Xây dựng một Intent


Intent là một đối tượng cung cấp thời gian chạy (runtime) liên kết giữa các thành phần riêng biệt, chẳng hạn như hai activity. Intent đại diện cho một "ý định làm điều gì đó" của một ứng dụng. Bạn có thể sử dụng intent cho nhiều nhiệm vụ khác nhau, nhưng trong bài học này ta sẽ dùng intent để kích hoạt activity khác.

Trong MainActivity, bạn thêm hằng số EXTRA_MESSAGE và đoạn code của phương thức sendMessage() như dưới đây:

public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /** Called when the user taps the Send button */
    public void sendMessage(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.editText);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
}

Android Studio lại gặp phải lần nữa lỗi Cannot resolve symbol, do đó bạn hãy nhấn Alt + Enter (hoặc Option + Return trên máy Mac). Các import của bạn cần bao gồm:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

Bạn sẽ thấy một lỗi vẫn còn tại DisplayMessageActivity, nhưng không sao; bạn sẽ sửa lỗi đó trong phần tiếp theo.

Dưới đây là những gì đã xảy ra trong phương thức sendMessage():

  • Hàm tạo Intent gồm hai tham số:
    • Context là tham số đầu tiên của nó (this được sử dụng vì lớp Activity là một phân lớp của Context)
    • Đối số Class là thành phần ứng dụng mà hệ thống phải phân phối Intent (trong trường hợp này, activity cần phải được kích hoạt).
  • Phương thức putExtra() sẽ thêm giá trị của EditText tới intent. Một Intent có thể mang các kiểu dữ liệu như các cặp khóa-giá trị được gọi là tính năng bổ sung. Khóa của bạn là một hằng public EXTRA_MESSAGE bởi vì activity tiếp theo sẽ sử dụng khóa để lấy giá trị văn bản. Thực tế tốt để xác định các khóa cho các tính năng bổ sung intent sử dụng tên gói của ứng dụng dưới dạng tiền tố. Điều này đảm bảo các key là duy nhất, trong trường hợp ứng dụng của bạn tương tác với các ứng dụng khác.
  • Phương thức startActivity() kích hoạt một thể hiện của DisplayMessageActivity được xác định bởi Intent. Bây giờ bạn cần tạo ra lớp đó.

Tạo activity thứ hai


  1. Trong cửa sổ Project, nhấp chuột phải vào thư mục app và chọn New > Activity > Empty Activity.
  2. Trong cửa sổ Configure Activity, hãy nhập "DisplayMessageActivity" cho mục Activity Name và nhấp vào Finish (để tất cả thuộc tính khác được đặt thành mặc định).

Android Studio tự động thực hiện ba việc:

  • Tạo file DisplayMessageActivity.
  • Tạo file bố cục activity_display_message.xml tương ứng .
  • Thêm phần tử <activity> được yêu cầu vào AndroidManifest.xml.

Nếu bạn chạy ứng dụng và nhấn vào nút phía trên activity đầu tiên thì activity thứ hai được kích hoạt nhưng trống. Điều này là do activity thứ hai sử dụng bố cục rỗng được cung cấp bởi mẫu.

Thêm chế độ xem văn bản


Constraint activity
Hình 1. Khung nhìn văn bản đặt ở giữa của bố cục

Activity mới bao gồm tệp sơ đồ bố trí trống, vì vậy bây giờ, bạn sẽ thêm một chế độ xem văn bản để thông điệp xuất hiện.

1. Mở app > res > layout > activity_display_message.xml.

2. Nhấp vào Turn On Autoconnect layout editor autoconnect on trong thanh công cụ (sau đó nó sẽ được kích hoạt, như thể hiện trong hình 1).

3. Trong cửa sổ Palette, nhấp vào Text và sau đó kéo một TextView vào bố cục-thả nó gần phía trên của bố cục, gần trung tâm để nó bám vào đường dọc xuất hiện. Autoconnect sẽ thêm các ràng buộc trái và phải để đặt view ở giữa theo phương ngang.

4. Tạo thêm một ràng buộc từ phía top của chế độ xem văn bản tới phía top của bố cục để nó xuất hiện như thể hiện trong hình 1.

Tùy chọn, thực hiện một số điều chỉnh cho phong cách văn bản bằng cách mở rộng textAppearance trong cửa sổ Attributes và thay đổi các thuộc tính như textSize và textColor.

Hiển thị thông báo


Bây giờ bạn sẽ sửa đổi activity thứ hai để hiển thị thông báo đã được thông qua bởi activity thứ nhất.

1. Trong DisplayMessageActivity, thêm đoạn mã sau vào phương thức onCreate():

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_message);
    
    // Lấy Intent đã kích hoạt activity này và xuất ra chuỗi
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

    // Bắt TextView của bố cục và thiết lập chuỗi cho nó
    TextView textView = findViewById(R.id.textView);
    textView.setText(message);
}

2. Nhấn Alt + Enter (hoặc Option + Return đối với máy Mac) để import các lớp còn thiếu. Các import của bạn phải bao gồm như sau:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

Thêm hướng


Các màn hình trong ứng dụng của bạn không phải là điểm đầu vào chính (tất cả màn hình không phải là màn hình "chủ"), vậy nên cần cung cấp phần điều hướng để người dùng có thể trở lại màn hình chính hợp lý trong phân cấp ứng dụng bằng cách nhấn vào nút Up trong thanh ứng dụng .

Tất cả bạn cần làm là khai báo activity nào là parent trong file AndroidManifest.xml. Mở tệp app > manifests > AndroidManifest.xml, tìm đến thẻ <activity> nơi chứa cho DisplayMessageActivity và thay đổi thành như sau:

<activity android:name=".DisplayMessageActivity"
          android:parentActivityName=".MainActivity">
    <!-- The meta-data tag is required if you support API level 15 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity" />
</activity>

Hệ thống Android giờ đây sẽ tự động thêm nút Up trong thanh ứng dụng.

Chạy ứng dụng


Bây giờ hãy chạy lại ứng dụng bằng cách nhấp vào Apply Changes  trong thanh công cụ. Khi nó được mở, bạn hãy nhập thông tin vào trường văn bản, và bấm Send để xem thông báo xuất hiện trong hoạt động thứ hai.

2 màn hình activity
Hình 2. Ảnh chụp màn hình của cả hai activity

Đó là kết quả, và bạn đã xây dựng xong ứng dụng Android đầu tiên của bạn, xin chúc mừng!

» Tiếp: Đại cương về Ứng dụng (App)
« Trước: Xây dựng một giao diện người dùng đơn giản
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!