5

Tôi có một ListView sử dụng chế độ xem được tái chế. Tôi đang cố gắng để ngăn chặn một cái nhìn từ tái chế. Vì vậy, tôi sử dụng setHasTransientState:Chế độ xem danh sách: Ngăn chế độ xem tái chế

android.support.v4.view.ViewCompatJB.setHasTransientState (Xem xem, boolean hasTransientState)

Nó hoạt động rất tốt trên phiên bản Jellybean nhưng nó không làm bất cứ điều gì trên Api < 16. Có cách nào để làm cho nó hoạt động hoặc có cách tiếp cận khác cho Jellybean trước?


tôi phát hiện ra làm thế nào để thiết lập một RecyclerListener như @Daniel Chow gợi ý.

listView.setRecyclerListener(new RecyclerListener() { 
     @Override 
     public void onMovedToScrapHeap(View view) { 
      // Stop animation on this view 
     } 
}); 
+2

tại sao bạn muốn để ngăn chặn chế độ xem tái chế? – Raghunandan

+0

Tôi muốn tạo hoạt ảnh cho chế độ xem. Bạn có thể xem cách hoạt động tại đây http://graphics-geek.blogspot.it/2013/02/devbytes-listview-animations.html – vovahost

+0

bạn đã sử dụng chức năng thư viện hỗ trợ: http://developer.android.com/ tham khảo/android/support/v4/view/ViewCompat.html # setHasTransientState (android.view.View, boolean) –

Trả lời

4

Đối với tiền Jellybean, tôi nghĩ rằng bạn chỉ có thể sử dụng setRecyclerListener trên ListView và khi RecyclerListener # onMovedToScrapHeap (Xem view) được gọi, xóa các hình ảnh động trên quan điểm người đã được tái chế và trực tiếp thực hiện công việc chính thức đó là phải được thực hiện khi hoạt ảnh kết thúc.

Mã bên trong onMovedToScrapHeap (Chế độ xem) phụ thuộc vào cách bạn triển khai hoạt ảnh, ví dụ: bạn có thể gọi View # clearAnimation() nếu trước đây bạn đã sử dụng View # startAnimation để bắt đầu hoạt ảnh.

+0

Bạn có thể viết một số mã về cách triển khai ** RecyclerListener # onMovedToScrapHeap (Chế độ xem) ** – vovahost

+1

@vovahost Có một vài cách để bắt đầu hoạt ảnh trong Android, vì vậy mã bên trong RecyclerListener # onMovedToScrapHeap (Chế độ xem) phụ thuộc. Nếu bạn sử dụng ViewPropertyAnimator thì bạn có thể gọi ViewPropertyAnimator # cancel(), nếu bạn sử dụng View # startAnimation để bắt đầu hoạt ảnh thì bạn nên gọi View # clearAnimation() để dừng nó. Khung nhìn được chuyển đến RecyclerListener # onMovedToScrapHeap (View view) thực sự giống như convertView trong adapter # getView(), vì vậy bạn cũng có thể sử dụng findViewById hoặc ViewHolder để tìm một khung nhìn con và thao tác nó. –

+0

Không phải chỉ có thể dừng hoạt ảnh (nếu tồn tại) trên getView? Ngoài ra, điều gì sẽ xảy ra với quan điểm không cần phải tái chế? nó sẽ đi vào hồ sơ phế liệu của các quan điểm cuối cùng? –

1

Bên cạnh vấn đề hoạt hình Daniel đã nói về một vấn đề khác khi biết khi nào chế độ xem của bạn được tái chế phải làm với quản lý bộ nhớ. Nếu bạn đang đặt các bitmap lớn, bộ nhớ chuyên sâu vào các mục danh sách của mình, có thể bạn không muốn chế độ xem của mình được tái chế nếu nó không có khả năng được sử dụng lại bởi các mục khác. Hook này cung cấp cho bạn một cơ hội để xóa bitmap mà bạn có thể đã gán cho một ImageView. Hy vọng rằng, đây là một vấn đề hiếm gặp.

3

Sử dụng android.support.v4.view.ViewCompat.setHasTransientState (Xem xem, boolean hasTransientState) thay vì android.support.v4.view.ViewCompatJB.setHasTransientState (Xem xem, boolean hasTransientState)