Bắt đầu hoạt động khác

Stay organized with collections Save and categorize content based on your preferences.

Khi kết thúc bài học trước, bạn đã có ứng dụng thể hiện hoạt động bao gồm một màn hình với một trường văn bản và nút Gửi. Trong bài học này, bạn sẽ thêm một mã vào MainActivity giúp khởi động hoạt động mới để hiển thị thông báo khi người dùng nhấn vào nút Gửi.

Phản hồi với nút Gửi

Làm theo các bước sau để thêm một phương thức vào lớp MainActivity. Lớp này sẽ được gọi khi bạn nhấn vào nút Gửi:

  1. Trong tệp app > java > com.example.myfirstapp > MainActivity, thêm mã giả lập phương thức sendMessage() sau:

    Kotlin

    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
        }
    
        /** Called when the user taps the Send button */
        fun sendMessage(view: View) {
            // Do something in response to button
        }
    }
    

    Java

    public class MainActivity extends AppCompatActivity {
        @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) {
            // Do something in response to button
        }
    }
    

    Có lẽ bạn sẽ gặp lỗi vì Android Studio không thể phân giải lớp View được dùng làm đối số phương thức. Để xoá lỗi, hãy nhấp vào khai báo View, đặt con trỏ lên mục đó rồi nhấn tổ hợp phím Alt+Enter hoặc Option+Enter trên máy Mac, để thực hiện Sửa lỗi nhanh. Nếu trình đơn xuất hiện, chọn Import class (Nhập lớp).

  2. Quay lại tệp activity_main.xml để gọi phương thức từ nút:
    1. Chọn nút trong Trình chỉnh sửa bố cục.
    2. Trong cửa sổ Attributes (Thuộc tính), tìm thuộc tính onClick và chọn sendMessage [MainActivity] từ danh sách thả xuống của thuộc tính đó.

    Lúc này, khi người dùng nhấn vào nút, hệ thống sẽ gọi phương thức sendMessage().

    Ghi lại các chi tiết trong phương thức này. Hệ thống cần đến các chi tiết này để nhận ra phương thức 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:

    • Truy cập công khai.
    • Một khoảng trống hoặc, trong Kotlin, là một giá trị trả về đơn vị ngầm ẩn.
    • View là thông số duy nhất. Đây là đối tượng View mà bạn đã nhấp vào ở cuối Bước 1.
  3. Tiếp theo, điền phương thức này để đọc nội dung của trường văn bản và gửi văn bản đó đến hoạt động khác.

Xây dựng ý định

Intent là một đối tượng cung cấp thời gian chạy liên kết giữa các thành phần riêng biệt, chẳng hạn như hai hoạt động. Intent biểu hiện ý định làm một việc nào đó của ứng dụng. Bạn có thể sử dụng ý định cho nhiều nhiệm vụ, nhưng trong bài học này, ý định của bạn là bắt đầu một hoạt động khác.

Trong MainActivity, hãy thêm hằng số EXTRA_MESSAGE và mã sendMessage(), như dưới đây:

Kotlin

const val EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    /** Called when the user taps the Send button */
    fun sendMessage(view: View) {
        val editText = findViewById<EditText>(R.id.editTextTextPersonName)
        val message = editText.text.toString()
        val intent = Intent(this, DisplayMessageActivity::class.java).apply {
            putExtra(EXTRA_MESSAGE, message)
        }
        startActivity(intent)
    }
}

Java

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.editTextTextPersonName);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
}

Dự kiến Android Studio lại gặp lỗi Không thể phân giải biểu tượng. Để xoá lỗi, nhấn tổ hợp phím Alt+Enter hoặc Option+Return trên máy Mac. Bạn sẽ gặp lại các mục nhập sau:

Kotlin

import androidx.appcompat.app.AppCompatActivity
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.EditText

Java

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

Lỗi DisplayMessageActivity vẫn tồn tại, nhưng không sao. Bạn sẽ sửa lỗi này trong phần sau.

Dưới đây là những gì diễn ra trong sendMessage():

  • Hàm khởi tạo Intent lấy hai tham số: ContextClass.

    Tham số Context được sử dụng đầu tiên vì lớp Activity là lớp con của Context.

    Trong trường hợp này, tham số Class của thành phần ứng dụng, được hệ thống cung cấp Intent,, là hoạt động sẽ bắt đầu.

  • Phương thức putExtra() sẽ thêm giá trị của EditText vào ý định. Intent có thể mang các loại dữ liệu dưới dạng cặp giá trị khoá-được gọi là phần bổ sung (extra).

    Khoá của bạn là một hằng số công khai EXTRA_MESSAGE vì hoạt động tiếp theo sẽ sử dụng khoá để truy xuất giá trị văn bản. Bạn nên xác định khoá cho phần bổ sung ý định cùng tên gói ứng dụng làm tiền tố. Việc này đảm bảo các khoá là duy nhất, trong trường hợp ứng dụng của bạn tương tác với ứng dụng khác.

  • Phương thức startActivity() bắt đầu bản sao của DisplayMessageActivity được Intent xác định. Tiếp theo, bạn cần tạo lớp đó.

Tạo hoạt động thứ hai

Để tạo hoạt động thứ hai, làm theo các bước sau:

  1. Trong cửa sổ Project (Dự án), nhấp chuột phải vào thư mục app (ứng dụng) và chọn New > Activity > Empty Activity (Mới>Hoạt động>Hoạt động trống).
  2. Trong cửa sổ Configure Activity (Định cấu hình hoạt động), nhập "DisplayMessageActivity" cho Tên hoạt động. Đặt tất cả thuộc tính khác về mặc định rồi nhấp vào Hoàn tất.

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

  • Tạo tệp DisplayMessageActivity.
  • Tạo tệp bố cục activity_display_message.xml tương ứng với tệp DisplayMessageActivity.
  • Thêm phần tử bắt buộc <activity> trong AndroidManifest.xml.

Nếu bạn chạy ứng dụng và nhấn vào nút của hoạt động đầu tiên, thì hoạt động thứ hai sẽ bắt đầu nhưng trống. Đó là do hoạt động thứ hai sử dụng bố cục trống được mẫu cung cấp.

Thêm thành phần hiển thị văn bản

Thành phần hiển thị văn bản (text view) nằm chính giữa trên đầu bố cục.
Hình 1. Thành phần hiển thị văn bản (text view) nằm chính giữa trên đầu bố cục.

Hoạt động mới gồm một tệp bố cục trống. Thực hiện các bước sau để thêm thành phần hiển thị văn bản vào nơi thông báo xuất hiện:

  1. Mở tệp app > res > layout > activity_display_message.xml.
  2. Trên thanh công cụ, nhấp vào Enable Autoconnection to Parent (Bật tính năng Tự động kết nối với mẹ). Thao tác này sẽ bật tính năng Tự động kết nối. Xem hình 1.
  3. Trong bảng điều khiển Palette (Bảng màu), nhấp vào Text (Văn bản), kéo nút TextView vào bố cục rồi thả nút đó vào gần giữa trên đầu bố cục để khớp với đường kẻ dọc sẽ xuất hiện. Tính năng tự động kết nối bổ sung các quy tắc ràng buộc bên trái và bên phải để đặt thành phần hiển thị vào chính giữa theo chiều ngang.
  4. Tạo thêm một quy tắc ràng buộc khác ở đầu thành phần hiển thị văn bản lên đầu bố cục để thành phần hiển thị hiển thị như trong hình 1.

Nếu muốn, bạn có thể điều chỉnh một số kiểu văn bản nếu mở rộng textAppearance trong bảng điều khiển Common Attributes (Thuộc tính chung) của cửa sổ Attributs (Thuộc tính) và thay đổi các thuộc tính như textSizetextColor.

Hiển thị thông báo

Ở bước này, bạn sửa đổi hoạt động thứ hai để hiển thị thông báo do hoạt động đầu tiên chuyển qua.

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

    Kotlin

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_display_message)
        
        // Get the Intent that started this activity and extract the string
        val message = intent.getStringExtra(EXTRA_MESSAGE)
    
        // Capture the layout's TextView and set the string as its text
        val textView = findViewById<TextView>(R.id.textView).apply {
            text = message
        }
    }
    

    Java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);
        
        // Get the Intent that started this activity and extract the string
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
    
        // Capture the layout's TextView and set the string as its text
        TextView textView = findViewById(R.id.textView);
        textView.setText(message);
    }
    
  2. Nhấn tổ hợp phím Alt+Enter hoặc Option+Return trên máy Mac để nhập các lớp cần thiết sau:

    Kotlin

    import androidx.appcompat.app.AppCompatActivity
    import android.content.Intent
    import android.os.Bundle
    import android.widget.TextView
    

    Java

    import androidx.appcompat.app.AppCompatActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.TextView;
    

Thêm nút điều hướng lên trên

Mỗi màn hình không phải điểm truy cập chính trong ứng dụng của bạn, tức là tất cả các màn hình không phải màn hình chính, phải cung cấp thành phần điều hướng để đưa người dùng đến màn hình mẹ logic theo hệ phân cấp của ứng dụng. Để thực hiện việc này, hãy thêm nút Mũi tên lên vào thanh ứng dụng.

Để thêm nút Mũi tên lên, bạn cần khai báo hoạt động nào là mẹ logic trong tệp AndroidManifest.xml. Mở tệp tại app > manifests > AndroidManifest.xml, xác định vị trí thẻ <activity> cho DisplayMessageActivity và thay bằng các thao tác 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>

Lúc này, hệ thống Android tự động thêm nút Mũi tên lên vào thanh ứng dụng.

Chạy ứng dụng

Nhấp vào Apply Changes (Áp dụng thay đổi) trên thanh công cụ để chạy ứng dụng. Khi ứng dụng mở ra, nhập thông báo vào trường văn bản rồi nhấn vào Send (Gửi) để xem thông báo đó xuất hiện trong hoạt động thứ hai.

Ứng dụng được mở, với văn bản được nhập vào màn hình ở bên trái và hiển thị ở bên phải.
Hình 2. Ứng dụng đã mở, với văn bản được nhập vào màn hình ở bên trái và hiển thị ở bên phải.

Vậy là bạn đã xây dựng xong ứng dụng Android đầu tiên!

Để tiếp tục tìm hiểu thông tin cơ bản về việc phát triển ứng dụng Android, hãy quay lại mục Xây dựng ứng dụng đầu tiên và truy cập vào các đường liên kết khác ở trong đó.