onCreate()
Phương pháp của bạn có một số sai sót lớn:
1) onCreate
chuẩn bị Hoạt động của bạn - vì vậy không có gì bạn làm ở đây sẽ được hiển thị cho người dùng cho đến khi phương pháp này kết thúc! Ví dụ: bạn sẽ không bao giờ có thể thay đổi TextView
văn bản của một văn bản ở đây nhiều hơn MỘT lần vì chỉ có thay đổi cuối cùng sẽ được vẽ và do đó hiển thị cho người dùng!
2) Hãy nhớ rằng một chương trình Android sẽ - theo mặc định - chỉ chạy trong MỘT chuỗi! Do đó: không bao giờ sử dụng Thread.sleep()
hoặc Thread.wait()
trong chuỗi chính của bạn, vốn chịu trách nhiệm về giao diện người dùng của bạn! (đọc "Giữ cho ứng dụng của bạn luôn phản hồi" để biết thêm thông tin!)
Những gì bạn khởi tạo Hoạt động của bạn là:
- không có lý do gì bạn tạo một
TextView
đối tượng mới t
!
- bạn chọn bố cục của mình
TextView
trong biến t
sau đó.
- bạn đặt văn bản của
t
(nhưng lưu ý: nó sẽ chỉ được hiển thị sau khi onCreate()
kết thúc và vòng lặp sự kiện chính của ứng dụng của bạn chạy!)
- bạn đợi 10 giây trong
onCreate
phương pháp của mình - điều này không bao giờ được thực hiện vì nó dừng tất cả hoạt động của giao diện người dùng và chắc chắn sẽ buộc ANR (Ứng dụng không phản hồi, xem liên kết ở trên!)
- sau đó bạn đặt một văn bản khác - văn bản này sẽ được hiển thị ngay sau khi
onCreate()
phương thức của bạn kết thúc và một số phương thức vòng đời Hoạt động khác đã được xử lý!
Giải pháp:
Đặt văn bản chỉ một lần trong onCreate()
- đây phải là văn bản đầu tiên hiển thị.
Tạo một Runnable
và mộtHandler
private final Runnable mUpdateUITimerTask = new Runnable() {
public void run() {
// do whatever you want to change here, like:
t.setText("Second text to display!");
}
};
private final Handler mHandler = new Handler();
cài đặt runnable này như một trình xử lý, có thể trong onCreate()
(nhưng hãy đọc lời khuyên của tôi bên dưới):
// run the mUpdateUITimerTask's run() method in 10 seconds from now
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
Lời khuyên: hãy chắc chắn rằng bạn biết Activity
vòng đời của nó! Nếu bạn làm những thứ như vậy trong onCreate()
điều này sẽ chỉ xảy ra khi của bạn Activity
được tạo lần đầu tiên ! Android có thể sẽ giữ cho bạn Activity
tồn tại trong một thời gian dài hơn, ngay cả khi nó không hiển thị! Khi người dùng "khởi động" lại nó - và nó vẫn tồn tại - bạn sẽ không thấy văn bản đầu tiên của mình nữa!
=> Luôn cài đặt trình xử lý trong onResume()
và tắt chúng trong onPause()
! Nếu không, bạn sẽ nhận được "cập nhật" khi của bạn hoàn toàn Activity
không hiển thị! Trong trường hợp của bạn, nếu bạn muốn xem lại văn bản đầu tiên của mình khi nó được kích hoạt lại, bạn phải thiết lập nó onResume()
, không phải onCreate()
!
.setText()
thay thế toàn bộ "widget" bằng văn bản mà bạn yêu cầu nó đặt; BAO GỒM văn bản mà bạn đã đặt ở đó.