Bạn có một biến count kiểu Int và muốn hiển thị nó lên TextView. Dòng textView.setText(count) có thể biên dịch nhưng không mang nghĩa “đổi số thành chữ”. Android cung cấp overload nhận số nguyên để tra tài nguyên chuỗi, vì vậy lỗi có thể xuất hiện ở runtime khi giá trị không phải resource ID hợp lệ.
Bài đối chiếu Android API reference ngày 08/11/2026; hai overload được bàn ở đây có từ API level 1. Code dành cho Android Views bằng Kotlin, không phải Compose. Ví dụ được rà theo chữ ký API và luồng dữ liệu; chưa biên dịch bằng Android SDK, chạy emulator, tái hiện crash hoặc đo hành vi thiết bị.
Kiểu đối số quyết định overload
TextView.setText(int) nhận ID của string resource. TextView.setText(CharSequence) nhận nội dung cần hiển thị. Cùng tên hàm không đồng nghĩa cùng cách diễn giải đối số.
fun showCount(textView: android.widget.TextView, count: Int) {
textView.setText(count.toString())
}
Hàm chuyển count thành String trước khi gọi setText. Với count bằng 12, nội dung dự định là chuỗi 12, thay vì yêu cầu Android tìm tài nguyên có mã số 12. Trong Kotlin cũng có thể gán textView.text = count.toString() khi muốn thể hiện trực tiếp việc đặt nội dung.
Ví dụ Activity không cần layout XML
Đặt Activity này trong package ứng dụng của bạn, khai báo nó trong manifest hoặc dùng làm Activity thử nghiệm. Bài để trống package vì namespace thuộc dự án người đọc, không phải một thư viện cần cài thêm.
import android.app.Activity
import android.os.Bundle
import android.widget.TextView
class CountDemoActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val count = 12
val label = TextView(this).apply {
textSize = 24f
setText(count.toString())
}
setContentView(label)
}
}
Màn hình dự định chỉ có một TextView hiển thị số. Không có network, lưu trữ, ViewModel hay phép tính dữ liệu; việc bỏ các phần đó giúp khi kiểm tra bạn tập trung vào kiểu đối số của setText. Muốn đưa vào màn hình thật, giữ luồng cập nhật UI đang có và chỉ sửa đúng điểm chuyển dữ liệu sang nội dung.
Resource ID vẫn có chỗ dùng đúng
Một tiêu đề cố định được khai báo trong tài nguyên chuỗi vẫn có thể truyền qua R.string.... String resources giải thích cách tên tài nguyên được tham chiếu từ code. Đừng đổi toàn bộ lời gọi nhận số nguyên thành toString một cách máy móc: nếu đầu vào vốn là resource ID, bạn sẽ hiển thị con số ID thay vì câu chữ.
Để tránh nhầm khi đọc code, đặt tên biến theo vai trò: count là số lượng; titleResId là ID tài nguyên. Nếu một helper nhận cả hai loại giá trị ở các chỗ gọi khác nhau, cân nhắc tách helper để hợp đồng không bị giấu sau kiểu Int chung.
Kiểm tra bằng một ma trận nhỏ
Trên dự án thử nghiệm, thử count bằng 0, 1, 12 và một số lớn trong miền Int. Khi dùng toString, nội dung mong đợi là biểu diễn chữ của từng số. Kiểm tra cả lần render đầu và lần cập nhật sau nếu màn hình nhận dữ liệu mới.
Nếu cần điều tra code gọi nhầm, xem chữ ký overload mà IDE chọn và stack trace thực tế. Resources.getText quy định việc tra ID không tồn tại có thể phát sinh NotFoundException. Bài không khẳng định mọi số nguyên đều gây cùng một lỗi, vì một giá trị có thể tình cờ tương ứng một tài nguyên trên bản build cụ thể.
Giới hạn của chuyển số thành String
count.toString() phù hợp để minh họa một số đứng riêng. Nó không tự quyết định cách phân nhóm hàng nghìn theo locale hoặc câu dịch bao quanh số. Khi thiết kế nội dung sản phẩm, xác định riêng yêu cầu định dạng số và dịch câu thay vì nối các mảnh text tùy tiện trong hàm cập nhật UI.
Tương tự, một giá trị thiếu không nên tự trở thành chữ null hoặc số 0 nếu nghiệp vụ phân biệt chúng. Xử lý trạng thái dữ liệu trước, sau đó mới chuyển giá trị đã xác định thành nội dung hiển thị.
Điểm cần nhớ khi review là đối số Int đang biểu diễn cái gì. Với số đếm, chuyển sang nội dung chữ; với string resource ID, giữ đường gọi tài nguyên. Một lần kiểm tra kiểu và vai trò của biến có thể làm rõ lỗi mà việc xem giao diện tĩnh không phát hiện được.

