Tôi đã triển khai Trình lập chỉ mục mục cho lớp Bộ điều hợp mở rộng BaseAdapter. Bây giờ cho lần ra mắt đầu tiên, Trình lập chỉ mục mục đang hiển thị lớp phủ chính xác. Nhưng khi nội dung của danh sách được cập nhật, phần Lớp phủ không được cập nhật và cung cấp cho ArrayOutOfBoundException. Đối với một sửa chữa những gì tôi đã làm là tôi đã thực hiện listview.setFastScrollEnabled (false); cập nhật nội dung bộ điều hợp; và sau đó listview.setFastScrollEnabled (true); Bây giờ điều gì xảy ra là lớp phủ được cập nhật nhưng Lớp phủ đang ở phía trên cùng bên trái của chế độ xem danh sách. Làm thế nào tôi có thể sửa lỗi này.Lớp chỉ mục mục không cập nhật khi thay đổi dữ liệu của bộ điều hợp
Trả lời
một workaround nhỏ mà đã được đề xuất bởi lee.wilmot là
private void jiggleGrid() {
int newWidth = flag(FLAG_THUMB_PLUS) ?
FrameLayout.LayoutParams.FILL_PARENT :
grid.getWidth() - 1;
FrameLayout.LayoutParams l = new FrameLayout.LayoutParams(
newWidth,
FrameLayout.LayoutParams.FILL_PARENT
);
grid.setLayoutParams(l);
toggleFlag(FLAG_THUMB_PLUS);
}
cờ và toggleFlag là một số chức năng.
Gọi phương thức này sau khi đặt setFastScrollEnabled(true);
. Nó làm việc cho tôi ....
bạn có thể vui lòng cho biết bố cục như thế nào? Tôi có nghĩa là định nghĩa XML. Workaround không làm việc cho tôi. – tomash
FLAG_THUMB_PLUS sẽ thực sự tuyệt vời khi biết – cV2
Giải pháp này không hoạt động nếu chiều rộng được đặt thành FILL_PARENT. Nếu bạn thực hiện điều này, và sau đó nói, thay đổi hướng, chiều rộng được đặt không chính xác. –
nghĩ rằng tôi muốn chia sẻ một phiên bản làm sẵn của workaround trên cho một ListActivity:
private boolean FLAG_THUMB_PLUS = false;
private void jiggleWidth() {
ListView view = getListView();
if (view.getWidth() <= 0)
return;
int newWidth = FLAG_THUMB_PLUS ? view.getWidth() - 1 : view.getWidth() + 1;
ViewGroup.LayoutParams params = view.getLayoutParams();
params.width = newWidth;
view.setLayoutParams(params);
FLAG_THUMB_PLUS = !FLAG_THUMB_PLUS;
}
trình cho tôi.
Các giải pháp trên là ok trừ trường hợp khi chiều rộng được đặt thành FILL_PARENT. Để làm cho chúng hoạt động trong trường hợp này, bạn nên ghi đè lênSizeChanged như thế này
@Override
protected void onSizeChanged (int w, int h, int oldw, int oldh)
{
super.onSizeChanged(w , h , oldw , oldh);
if (mInstance.getLayoutParams().width != FrameLayout.LayoutParams.FILL_PARENT)
{
mInstance.post(new Runnable()
{
@Override
public void run()
{
mInstance.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT , FrameLayout.LayoutParams.FILL_PARENT));
}
});
}
}
Với kích thước sửa đổi này sẽ ổn sau khi thay đổi hướng màn hình.
Để làm cho nó hoạt động trong mọi trường hợp (đặc biệt với thay đổi định hướng và định hướng FILL_PARENT), thay vì sử dụng trực tiếp ListView, hãy sử dụng lớp này và gọi invalidateSectionIndexer() sau khi bạn đã thay đổi Bộ điều hợp.
class MyListView extends ListView {
public MyListView(Context context) {
super(context);
}
public void invalidateSectionIndexer() {
// 1. this invalidates the Section Indexer
super.setFastScrollEnabled(false);
// Your adapter might be wrapped, e.g. when adding headers/footers.
ListAdapter adapter = getAdapter();
BaseAdapter baseAdapter = (adapter instanceof WrapperListAdapter) ?
(BaseAdapter) ((WrapperListAdapter) adapter).getWrappedAdapter() :
(BaseAdapter) adapter;
baseAdapter.notifyDataSetChanged();
super.setFastScrollEnabled(true);
// 2. This fixes the android bug of section overlay not positioned correctly.
int width = getWidth();
int height = getHeight();
super.onSizeChanged(width, height, width, height);
}
}
Tôi gặp sự cố tương tự khi sử dụng ResourceCursorAdapter. Bộ chỉ mục phần không cập nhật sau khi bộ điều hợp mới được thiết lập cho danh sách hoặc phương thức swapCursor() để cập nhật con trỏ được gọi. Tôi đã thử tất cả các giải pháp được đăng trên StackOverflow mà không thành công. Chỉ workaround workaround mà tôi tìm thấy là bạn cần phải tách/đính kèm đoạn mà bạn muốn cập nhật (bạn cần kích hoạt onCreateView() phương thức phân đoạn nơi bạn xây dựng giao diện người dùng) sau khi cập nhật Cursor (không phải CursorAdapter .. bạn cần cập nhật/đặt bộ điều hợp trong onCreateView()). Điều này làm việc cho tôi. Đây là mã mà tôi sử dụng để gắn lại đoạn.
fragmentManager.beginTransaction().detach(frag).attach(frag).commitAllowingStateLoss();
Bạn cũng có thể thử xóa danh sách tương ứngXem từ bố cục và thêm nó vào bố cục lần nữa nhưng tôi gặp phải một số vấn đề khi sử dụng phương pháp này.
- 1. Thay đổi số chỉ mục của một khung dữ liệu
- 2. cập nhật chỉ mục lucene
- 3. Hủy mục khỏi bộ điều hợp của ViewPager sau khi hướng màn hình thay đổi
- 4. Android SimpleCursorAdapter không cập nhật khi thay đổi cơ sở dữ liệu
- 5. Thay đổi dữ liệu bộ điều hợp ListView mà không ListView được thông báo
- 6. Hộp danh sách Winforms không cập nhật khi thay đổi dữ liệu bị ràng buộc
- 7. C# DataGridView không cập nhật khi nguồn dữ liệu được thay đổi
- 8. Cập nhật ràng buộc dữ liệu khi thay đổi giá trị, không phải khi tabbing ra
- 9. Thay đổi dữ liệu trong một khung dữ liệu với chỉ mục phân cấp
- 10. Tại sao cardinality của một chỉ mục trong MySQL vẫn không thay đổi khi tôi thêm một chỉ mục mới?
- 11. ComboBox không tự động cập nhật khi DataSource thay đổi?
- 12. Dừng cập nhật chỉ mục Maven eclipse
- 13. Cập nhật SQL trong bộ dữ liệu
- 14. Làm cách nào để thay đổi giá trị chỉ mục của khung dữ liệu Pandas?
- 15. Dừng Hibernate từ việc cập nhật các bộ sưu tập khi họ đã không thay đổi
- 16. Ràng buộc dữ liệu không cập nhật khi TextBox trống
- 17. Thay đổi chỉ mục không độc lập thành chỉ mục duy nhất
- 18. Lỗi khi cập nhật thay đổi svn
- 19. Tại sao ObservableCollection không được cập nhật trên các mục thay đổi?
- 20. chỉ mục cột dữ liệu thống kê
- 21. Cập nhật không đồng bộ cho các mục ObservableCollection
- 22. Combobox SelectedItem không cập nhật khi thay đổi nguồn
- 23. Cập nhật dữ liệu VBO với glBufferSubData()
- 24. ios thanh điều hướng mục nút phải thay đổi khi đẩy bộ điều khiển xem mới
- 25. Tại sao "xóa cục bộ, xóa đến khi cập nhật" của một thư mục xung đột?
- 26. Cập nhật bộ dữ liệu h5py
- 27. Tự động cập nhật bộ điều hợp AutoCompleteTextView
- 28. Tại sao chỉ mục của tôi bị giảm khi tôi thay đổi lược đồ của Chế độ xem chỉ mục?
- 29. Cập nhật ứng dụng, NSURL và Thư mục tài liệu
- 30. Toàn bộ bảng chữ cái cho các mục chỉ mục trong dữ liệu lõi
Có cùng một vấn đề, chưa giải quyết được - Android 1.5 – tomash
Tôi đã điền một lỗi 9054 http://code.google.com/p/android/issues/detail?id=9054 – tomash