khi gọi notifyDataSetChanged
trên RecyclerView
nó không giữ lại vị trí cuộn và cuộn lên trên, là có bất kỳ giải pháp để duy trì vị trí của nó cuộn?RecyclerView notifyDataSetChanged cuộn đến vị trí hàng đầu
Trả lời
Bạn có thể sử dụng swapAdapter() và sau khi gọi notifyDataSetChange(). Điều này làm việc cho tôi.
Không chắc chắn nếu điều này giải quyết vấn đề của bạn nhưng tôi đã gặp vấn đề tương tự và đó là vì tôi đã gọi setAdapter sau khi thông báo. Vì vậy, không gọi setAdapter sau khi thông báo giải quyết được vấn đề.
mAdapter.notifyItemRangeInserted(mAdapter.getItemCount(), list.size() - 1);
recyclerView.setAdapter(); // remove this line.
//Do this only when you're setting the data for the first time or when adapter is null.
Cảm ơn, đó là công việc –
Nếu mục danh sách RecyclerView của bạn có thuộc tính "wrap_content", Recyclerview tính lại chiều cao và cuộn lên trên.
Có hai giải pháp:
- Đặt chiều cao của bạn một giá trị không đổi như thế này:
layout_height="100dp"
Sử dụng StaggeredGridLayoutManager như thế này:
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL));
nếu bạn muốn thay đổi các mục với hoạt ảnh, sử dụng phương thức notifyItemChanged trong Fragm ent hoặc Activity. Không có trong Adaptor lớp:
mRecyclerView.getAdapter().notifyItemChanged(position);
Giải pháp thứ hai là hiệu quả hơn và tôi đề nghị này một
Có, chế độ xem Recycler tính toán chiều cao trong trường hợp "wrap_content" để sửa chữa là đặt chiều cao bố cục cố định hoặc tăng chiều cao thành "match_parent". – anp8850
RecycleViews sẽ di chuyển trở lại đầu vào bất kỳ biến thể của notifyDataSetChanged
nếu họ không có một người quản lý bố trí. Đây là một ví dụ về cách thiết lập một.
recycleView.setLayoutManager(new LinearLayoutManager(context, OrientationHelper.VERTICAL, false));
Như tôi đoán, những gì bạn đang làm là đặt lại adapter để RecyclerView
và sau đó gọi notifyDataSetChanged().
Bạn cần phải vượt qua chỉ dataList
để adapter bằng cách thông qua dataList
trong phương pháp chuyển đổi như bộ chuyển đổi update(dataList)
. Và trong phương pháp này, bạn có thể gán danh sách này vào danh sách bộ điều hợp như;
public void update(ArrayList<Hashmap<String,String> list){
this.mList = list;
}
bạn có thể giữ được vị trí bằng cách tiết kiệm nó trước khi notifyDataSetChanged và sau đó gọi cuộn trơn tru đến vị trí lưu
final int currentVisibleItem = ((LinearLayoutManager) layourmanager).findFirstCompletelyVisibleItemPosition();
productListAdapter.notifyDataSetChanged();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if(currentVisibleItem>-1 && currentVisibleItem<lstProducts.size())
rv_products.scrollToPosition(currentVisibleItem);
}
}, 100);
- 1. Dừng người dùng cuộn để đặt vị trí trên RecyclerView
- 2. RecyclerView Adaptor notifyDataSetChanged không làm việc
- 3. Cuộn UITableView đến vị trí cụ thể
- 4. Giữ lại vị trí trong ListView sau khi gọi notifyDataSetChanged
- 5. recyclerview bên xem di chuyển ảnh hưởng đến vị trí cuộn
- 6. Espresso: Recyclerview cuộn đến cuối
- 7. Vị trí con trỏ đến cuối văn bản trong uitextview và cuộn đến vị trí
- 8. RecyclerView smoothScroll đến vị trí ở giữa. android
- 9. RecyclerView đặt sai vị trí trênBindViewHolder
- 10. Lệnh notifydatasetchanged onCreateViewHolder khi sử dụng RecyclerView
- 11. Đặt vị trí thanh cuộn
- 12. Đặt vị trí cuộn
- 13. Làm cách nào để lưu và khôi phục vị trí chính xác của cuộn RecyclerView?
- 14. notifyDataSetChanged() làm cho danh sách làm mới và cuộn nhảy trở lại đầu trang
- 15. Làm thế nào để lưu vị trí cuộn của RecyclerView trong Android?
- 16. Phát hiện khi RecyclerView đạt đến vị trí thấp nhất trong khi di chuyển
- 17. HorizontalGridView/RecyclerView di chuyển vị trí cuộn khi hình ảnh Picasso tải
- 18. Làm thế nào để duy trì vị trí cuộn trong RecyclerView sau khi thêm mục vào chỉ mục đầu tiên của nó và gọi notifydatasetchange
- 19. Chrome nhớ vị trí cuộn
- 20. Thay đổi vị trí thanh cuộn
- 21. cách đặt vị trí cuộn trên uiwebview
- 22. RecylerView cuộn đến vị trí mong muốn mà không cần hoạt hình
- 23. Cách di chuyển hàng DataTable đến vị trí đầu tiên của DataTable
- 24. Cách mở rộng AppBarLayout khi cuộn xuống đến ở đầu RecyclerView
- 25. RecyclerView: nhận vị trí và chuyển sang hoạt động
- 26. CListCtrl: Cách duy trì vị trí cuộn?
- 27. lấy cửa sổ cuộn hoặc vị trí cuộn trong y
- 28. Ẩn thanh cuộn RecyclerView
- 29. Lấy phần trăm vị trí cuộn
- 30. C#/WPF - Lấy vị trí cuộn ScrollViewer?
Bạn đã tìm thấy giải pháp nào? –
** KHÔNG ** gọi 'notifyDataSetChanged()' trên 'RecyclerView'. Sử dụng các phương thức mới như 'notifyItemChanged()', 'notifyItemRangeChanged()', 'notifyItemInserted()', etc ... –
Tôi đã thử notifyItemRangeInserted(), nhưng thậm chí là cuộn lên trên cùng. Bất kỳ ý tưởng? –