2013-06-28 32 views
9

Tôi bị kẹt và tôi không thể tìm thấy giải pháp cho bất kỳ nơi đâu. :(Hoạt ảnh không bắt đầu trong các mục ListView hiện đang hiển thị

Tôi có một ImageView bên Layout của tôi về từng hạng mục của ListView của tôi (GridView), được cung cấp bởi một BaseAdapter . Khi hình ảnh được nạp và tôi giao BitmapDrawable nạp vào ImageView sử dụng

imageView.setImageDrawable(newImage); 

mục bật lên mà không cần bất kỳ vấn đề

NHƯNG nếu tôi giao BitmapDrawable mới bằng cách sử dụng một TransitionDrawable HOẶC bằng cách gán một Animation đơn giản:.

//this is inoperative - animation will not start for currently displayed items! No solution found :(
Animation a = LibResource.getResourceAnimation(activity, R.anim.fade_in); 
imageView.setImageDrawable(newImage); 
imageView.startAnimation(a); 

Hoạt ảnh sẽ không bắt đầu cho các MỤC HIỂN THỊ HIỆN TẠI của GridView của tôi. Nếu tôi cuộn xuống GridView và cuộn nó trở lại mục được đề cập, Hình ảnh được hiển thị và Hoạt ảnh đã được thực hiện!

Tôi đã thử các bản sửa lỗi sau:

imageView.invalidateDrawable(newImage); 
imageView.invalidate(); 

Tôi cũng đã thử các báo cáo sau đây sau khi giao Animation - Tất nhiên, tôi gọi họ là ON THE UI-Thread, SAU gán và bắt đầu Animation ON THE UI-tHREAD:

myGridView.invalidate(); 
myGridView.invalidateViews(); 
myGridView.getAdapter().notifyDataSetChanged(); 

Như đã đề cập, vấn đề này chỉ xảy ra cho các hạng mục VISIBLE trong ListView của tôi.

Tại sao hoạt ảnh hoặc chuyển đổi có thể vẽ được không bắt đầu, ngay cả sau khi gọi invalidate() vv trên tất cả các chế độ xem có liên quan?

Sự cố xảy ra trên XPeria-Arc-S của tôi (API cấp 10) và trong API giả lập Android 8,9,10. Đây có phải là lỗi trong Hệ thống Android không?

Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều!

Cảm ơn trước

Christopher


Ok - Cảm ơn bạn trả lời nhanh chóng của bạn.

tôi có vấn đề và sau rất nhiều thời gian tổ chức lại cấu trúc mã của tôi để làm việc này, tôi đến điểm rằng đây đã không giải quyết vấn đề của tôi :(.

Bên cạnh đó, nó là KHÔNG áp dụng hoặc rất thiết thực đối với tôi để thay đổi nội dung trong việc tạo ra các quan điểm. có lẽ bạn có bất kỳ giải pháp khác liên quan đến vấn đề này?

Trân trọng

Christopher

Trả lời

6
  1. Yêu cầu bộ điều hợp chuyển sang chế độ xem sinh động vào lần tiếp theo nó sẽ được yêu cầu xem.
  2. Gọi invalidateViews().
  3. Khi getView được gọi trên chế độ xem bộ điều hợp tạo và tạo hoạt ảnh.
1

Tôi đã giải quyết được sự cố này.

Bắt đầu hoạt ảnh trong chế độ xem cho các mục ListView/GridView hiện có sẽ không hoạt động nếu bạn cố gán Phim hoạt hình này cho thành phần được tham chiếu của mục này.

Thay vào đó, bạn phải vô hiệu hóa GridView

myGridView.invalidateViews()

và bắt đầu Animation trong theo

getView()

phương pháp của BaseAdapter kết nối.

Mặc dù phương pháp này đang được gọi rất thường xuyên bởi hệ thống, bạn thường sử dụng một cơ chế lưu trữ tất cả các chế độ xem. Vì vậy, nếu bạn muốn bắt đầu một hoạt hình trong một mục cụ thể, bạn chỉ cần tạo lại khung nhìn và lần sau hệ thống gọi getView() sau khi gọi myGridView.invalidateViews(), hoạt ảnh sẽ bắt đầu đúng!

Nhờ người dùng đã xóa câu trả lời hữu ích của mình.

Greetings Christopher

+1

Rất vui được thấy nó đã giúp, tôi đã hủy xóa câu trả lời gốc. –

+0

Cảm ơn bạn rất nhiều! :) Tôi đã không thể tổ chức lại tất cả mã của mình ngay lập tức để thực hiện công việc này để nó không thành công cùng một lúc, nhưng điều này chắc chắn là cách chính xác để làm điều đó! : D –

0

Đây là cách tôi đã có thể giải quyết nó. Điều quan trọng là để thông báo cho bộ dữ liệu thay đổi bằng cách đăng lên hàng đợi tin nhắn của GridView, để 'notifyDataSetChanged' của bạn được gọi sau khi mọi thứ mà GridView phải làm là xong.

myGridView.post(new Runnable() { 
    public void run() { 
    myGridView.notifyDataSetChanged(); 
    } 
}); 
0

Thêm android:animateLayoutChanges="true" trong ListView để giải quyết sự cố.

<ListView 
    android:id="@+id/list_view" 
    android:animateLayoutChanges="true" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 
Các vấn đề liên quan