vào hoạt động trên Android, trước tiên tôi sẽ khôi phục văn bản trong EditText và thêm sau đó, một TextWatcher vào đó.TextWatcher được gọi ngay cả khi văn bản được đặt trước khi thêm người theo dõi
private static int WC = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("TextWatcherTest", "onCreate:\t" +CLASS_NAME);
setContentView(R.layout.main);
EditText et = (EditText)findViewById(R.id.editText);
Log.e("TextWatcherTest", "Set text xyz");
et.setText("xyz");
et.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) { }
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void afterTextChanged(Editable s) {
Log.e("TextWatcherTest", "afterTextChanged:\t" +s.toString());
}
});
}
nhưng khi tôi chạy hoạt động, phương thức afterTextChanged được gọi ngay cả khi chính Người theo dõi được thêm sau khi đặt văn bản. vì vậy các dữ liệu ghi nhận là một cái gì đó giống như
onCreate: LifecycleMain Set text xyz // screen rotation onCreate: LifecycleMain Set text xyz afterTextChanged: xyz 2
quầy trong TextWatcher cho thấy rằng người quan sát đó được gọi là là một trong đó đã được bổ sung sau khi văn bản đã được thiết lập trong EditText. bất kỳ ý tưởng tại sao điều đó xảy ra và làm thế nào tôi có thể ngăn chặn điều đó?
không thực sự. nó thực sự đúng là nó hoạt động lần đầu tiên hoạt động được tạo ra, nhưng EditText là mỗi lần một cá thể mới mà không có bất kỳ người xem nào gắn liền với nó. tôi đã đơn giản hóa mã và thêm một bộ đếm cho trình theo dõi: – SimonSays
có u được định nghĩa editText et là tĩnh không? nếu có thì đây có thể là lý do. và như bạn đề cập đến nó hoạt động f9 lần đầu tiên, sau đó các prob chắc chắn rằng trường hợp mới của ediText là không nhận được tạo ra mỗi lần –
xin lỗi, nó cập nhật bình luận của tôi trước khi tôi hoàn thành nó. tôi đã cập nhật mã ở trên ngay bây giờ. tôi đã đơn giản hóa nó và thêm một bộ đếm cho TextWatcher. những gì bạn có thể thấy là vấn đề không xuất hiện lần đầu tiên hoạt động được tạo ra, nhưng lần thứ hai. NHƯNG, phiên bản TextWatcher thứ hai được gọi, không phải là phiên bản đầu tiên. cũng EditText luôn luôn là một trường hợp mới mà không có bất kỳ watcher đính kèm. và không; EditText không được định nghĩa tĩnh. – SimonSays