Tôi đã triển khai Recyclerview
trong ứng dụng thử nghiệm của mình. Hiện tại tôi đang thu thập khoảng 5000 mục dữ liệu vào một mô hình và tải chế độ xem của tôi với danh sách này. Tất cả mọi thứ là tuyệt vời, và thực hiện độc đáo nhưng tôi không đặc biệt muốn tải tất cả 5000 mặt hàng. Tôi muốn tải 100 mục và sau khi người dùng chạm vào dưới cùng, tải 100 mục tiếp theo và về cơ bản biến nó thành một danh sách ngày càng phát triển.Tôi có một Recyclerview và một danh sách với 5000 mục nhưng tôi chỉ muốn tải 100 mục tại một thời điểm
Tôi có thể triển khai onScrollListener
chống lại Recyclerview
để phát hiện khi tôi đến cuối nhưng vấn đề của tôi (đơn giản như âm thanh này) là cách tốt nhất để nói cho Recyclerview
chỉ tải 100 cho đến khi tôi Nói?
Adaptor của tôi:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<ImageFeed> mFeedList;
public MyAdapter(List<ImageFeed> feedList) {
this.mFeedList = feedList;
}
public void setFeedList(List<ImageFeed> feedList) {
mFeedList = feedList;
}
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup vGroup, int i) {
View v = LayoutInflater.from(vGroup.getContext()).inflate(R.layout.recycler_list, vGroup, false);
return new MyAdapter.ViewHolder(v);
}
@Override
public void onBindViewHolder(final MyAdapter.ViewHolder viewHolder, int i) {
String mTitle = mFeedList.get(i).getTitle();
...//Do other stuff
}
@Override
public int getItemCount() {
return mFeedList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
protected ImageView mImageView;
protected TextView mTitle;
protected ProgressBar mLoader;
private int mItemId;
public ViewHolder(View itemView) {
super(itemView);
this.mImageView = (ImageView) itemView.findViewById(R.id.imgItem);
this.mTitle = (TextView) itemView.findViewById(R.id.txtTitle);
this.mLoader = (ProgressBar) itemView.findViewById(R.id.mLoaderProgress);
this.mImageView.setOnClickListener(this);
itemView.setOnClickListener(this);
}
public void setItem(int item) {
this.mItemId = item;
}
@Override
public void onClick(View v) {
if (v instanceof ImageView) {
Toast.makeText(v.getContext(), "Image view clicked: " + this.mItemId, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(v.getContext(), this.mItemId + " ", Toast.LENGTH_SHORT).show();
}
}
}
}
Suy nghĩ kịch bản ra tôi đã có thể nghĩ thông qua một danh sách nhỏ hơn là một khả năng nhưng nó không cảm thấy hoàn toàn đúng.
có, nó thực sự là một mẫu * phổ biến *. Có lẽ bạn có thể bắt đầu tải trước nó khi bạn là x yếu tố xa phía dưới – Blackbelt
Tôi có thể hiểu nhầm câu hỏi, nhưng điều này dường như không cụ thể đối với RecyclerView. Nếu bạn đã thực hiện công việc tải 5.000 mục, bạn đã thực hiện việc nâng hạng nặng. Nếu không, tôi nghĩ bạn đang đi đúng hướng bằng cách triển khai onScrollListener và chỉ cần tải các trang dữ liệu tiếp theo khi người dùng đến cuối trang. –
Đó là một vấn đề phổ biến nhưng tôi không biết về một giải pháp phổ biến/đơn giản. Khái niệm bộ điều hợp tiêu chuẩn không có gì bao gồm mà sẽ cho bạn biết phần nào của mô hình sao lưu là bắt buộc hoặc hiện được hiển thị. Nó chỉ dành cho "thích nghi" từ dữ liệu * được nạp * tới các mục được hiển thị. Bạn có thể giải quyết ví dụ: bằng cách thực hiện tải tự động thông qua trình lắng nghe cuộn hoặc các mục đặc biệt khi được hiển thị (mục danh sách có nội dung "tải ..") tải lên, phân trang thủ công qua nút/vuốt/.. hoặc thậm chí bằng cách hiển thị các mục giả trong khi tải một cách ngẫu nhiên các mục thực tế (bộ tải hình ảnh làm điều đó). – zapl