Mã của bạn hơi khó hiểu do định dạng kém.
Dù sao, câu trả lời được cung cấp thực sự không phải là một bản sửa lỗi. Con trỏ được trả về tại onLoadFinished
nên được đảm bảo không bị đóng, vì vậy bạn đang tải con trỏ của mình sai cách. Cụ thể, khi bạn gọi
adapter.getFilter().filter(s.toString());
Tôi không thực sự hiểu chuyện gì đang xảy ra ở đây, nhưng tôi hiểu rằng bạn nên làm điều gì đó khác. Chỉ cần lưu trữ bộ lọc truy vấn trong một trường trong Fragment
của bạn và chạy getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this);
. Lưu ý rằng bạn chạy restartLoader
chứ không phải initLoader
, bởi vì bạn có dữ liệu khác mà bạn muốn truy vấn.
Trong onCreateLoader
của bạn , bạn nên sử dụng bộ lọc mà bạn đã lưu trữ làm biến phiên bản cho selection
.
Một số thông tin cơ bản
initLoader
tải dữ liệu đã được tải trong lần chạy cuối cùng, nếu dữ liệu đã chạy trước đó. Đây là lý do tại sao bạn gọi trong phương thức khởi tạo của Fragment / Activity. Điều này rất hữu ích vì bạn sẽ không phải yêu cầu thay đổi hướng.
restartLoader
dọn dẹp dữ liệu đã tải trước đó để bạn nhận được Loader
mới để làm việc với (có thể) dữ liệu khác nhau.
Nếu bạn không thực sự chắc chắn mình vẫn đang làm gì, hãy đọc bài viết này, đây là một bài viết giới thiệu rất hay về Máy xúc với mã mẫu trông rất giống những gì bạn muốn đạt được. Ban đầu, máy xúc lật khá bí ẩn, nhưng khi bạn hiểu rõ thì mọi việc sẽ suôn sẻ.