2012-12-26 24 views
6

Google đã phát hành api YouTube cho Google. Trong đó api là một YouTubeThumbnailView để hiển thị hình thu nhỏ của một bộ phim. Tôi muốn hiển thị hình thu nhỏ trong một ListView. Tôi đã thực hiện một bộ chuyển đổi để tạo ra các khung nhìn. Nhưng tôi không chắc chắn làm thế nào để xử lý này.YouTubeThumbnailView trong ListView

Trong getView của bộ điều hợp ListView của mình, tôi tăng bố cục bao gồm YouTubeThumbnailView. Theo tài liệu (https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubeThumbnailView) tôi nên gọi phương thức khởi tạo.

Tôi tự hỏi liệu tôi có cần gọi phương thức khởi tạo một lần hay cũng gọi điều này nếu chế độ xem được sử dụng lại bởi ListView? Không có cách nào để kiểm tra xem YouTubeThumbnailView đã được khởi tạo chưa? Vì vậy, tôi đoán tôi nên gọi nó nhiều lần. Nhưng tôi không biết liệu điều đó có được phép không?

Trả lời

16

Bạn chỉ nên gọi một lần, nhưng lưu tham chiếu đến trình tải sau khi được khởi chạy. Một cách để giải quyết vấn đề này là giữ bản đồ từ View đến YouTubeThumbnailLoader. Trong getView, có 3 trường hợp:

  1. Chế độ xem mới và cần được khởi tạo.
  2. Chế độ xem đã được khởi tạo và chúng tôi có tham chiếu đến trình tải.
  3. Chế độ xem hiện đang khởi chạy.

Trong trường hợp 1 và 3, bạn cần phải nhớ trình tải nên làm gì khi được khởi chạy. Bạn có thể ví dụ: lưu id video trong thẻ của chế độ xem.

Ví dụ mã:

Map<View, YouTubeThumbnailLoader> loaders; 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
    String videoId = getVideoId(position); 

    if (view == null) { 
    // Case 1 - We need to initialize the loader 
    view = inflater.inflate(..., parent, false); 
    YouTubeThumbnailView thumbnail = (YouTubeThumbnailView) view.findViewById(R.id.thumbnail); 
    thumbnail.setTag(videoId); 
    thumbnail.initialize(DeveloperKey.DEVELOPER_KEY, thumbnailListener); 
    } else { 
    YouTubeThumbnailView thumbnail = (YouTubeThumbnailView) view.findViewById(R.id.thumbnail); 
    YouTubeThumbnailLoader loader = loaders.get(thumbnail); 
    if (loader == null) { 
     // Case 3 - The loader is currently initializing 
     thumbnail.setTag(videoId); 
    } else { 
     // Case 2 - The loader is already initialized 
     thumbnail.setImageResource(R.drawable.loading_thumbnail); 
     loader.setVideo(videoId); 
    } 
    } 
    return view; 
} 

Và trong thumbnailListener của bạn:

@Override 
    public void onInitializationSuccess(YouTubeThumbnailView view, YouTubeThumbnailLoader loader) { 
    String videoId = (String) view.getTag(); 
    loaders.put(view, loader); 
    view.setImageResource(R.drawable.loading_thumbnail); 
    loader.setVideo(videoId); 
    } 
+0

tôi đã một số vấn đề, bởi vì tôi đã sử dụng các lớp thực hiện sai như Bản đồ, nhưng khi tôi nhận rằng sắp xếp ra nó hoạt động tốt . Cảm ơn bạn đã giải pháp! –

+0

hoàn hảo, hoạt động như một sự quyến rũ – khurramengr