tôi sử dụng đoạn mã sau để thực hiện tìm kiếm khi người dùng nhập vào một EditText:Làm cách nào để tránh nhiều trình kích hoạt trên EditText khi người dùng đang gõ?
EditText queryView = (EditText) findViewById(R.id.querybox);
queryView.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
triggerSearch(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
});
Tuy nhiên, điều này gây nên nhiều lần khi người dùng gõ một từ. Đó là nếu người dùng gõ "hello", mã này sẽ kích hoạt 5 lần với các giá trị ("h", "he", "hel", "hell", "hello"). Thông thường, điều này sẽ ổn nhưng việc tìm kiếm được kích hoạt là tốn kém và tôi không muốn lãng phí tài nguyên cho các tìm kiếm trung gian không sử dụng tuyệt vời. Điều tôi muốn là người nghe chỉ kích hoạt một ngưỡng nhất định sau khi người dùng bắt đầu nhập hoặc một số loại khung hình chờ đợi trong người nghe trước khi gọi số triggerSearch
và nếu một sự kiện khác được kích hoạt trước thời gian chờ đó, hãy tự hủy.
Lớp xử lý này phải là tĩnh hoặc rò rỉ có thể xảy ra. – Choletski
@Choletski hãy giải thích cách rò rỉ có thể xảy ra và làm cho tĩnh sẽ ngăn chặn điều đó? – jitenagarwal19
@ jitenagarwal19 một trình xử lý tĩnh sẽ không giữ tham chiếu đến lớp kèm theo – andrei