2013-04-22 17 views
9

Tôi đang làm việc trên API Google Map v2 mới.Thông tin cập nhật AndroidMap 2 của Android tự động trong InfoWindow với ImageView thông qua trình tải hình ảnh phổ quát

Tôi đã sử dụng ImageLoader để hiển thị hình ảnh động trên Marker.

Nhưng vấn đề là khi tôi đã có onLoadingComplete() của Universal Image Loader, ImageView không bị vô hiệu hóa không tự động cũng không phải bằng tay.

Lần tới nếu tôi nhấp vào cùng một điểm đánh dấu, hình ảnh sẽ được hiển thị từ Bộ nhớ cache của Trình tải hình ảnh toàn cục.

Dưới đây là CustomInfoWindowAdapter tôi mã:

private class CustomInfoWindowAdapter implements InfoWindowAdapter { 

    @Override 
    public View getInfoContents(Marker marker) { 
     return null; 
    } 

    @Override 
    public View getInfoWindow(Marker marker) { 
     final View mWindow = getLayoutInflater().inflate(R.layout.custom_info_window, null); 

     render(marker, mWindow); 
     return mWindow; 
    } 

    private void render(final Marker marker, View view) { 

     final String url = markers.get(marker.getId()).getStrProfilePic(); 
     final ImageView image = ((ImageView) view.findViewById(R.id.badge)); 
     Log.e(TAG, "URL : " + url); 

     if (url != null && !url.equalsIgnoreCase("null") 
       && !url.equalsIgnoreCase("")) { 
      imageLoader.displayImage(url, image, options, new SimpleImageLoadingListener() { 
       @Override 
       public void onLoadingComplete(String imageUri, View view, 
         Bitmap loadedImage) { 
        super.onLoadingComplete(imageUri, view, loadedImage); 
        ((ImageView) view).invalidate(); 
       } 
      }); 
     } else { 
      image.setImageResource(R.drawable.noimage); 
     } 

     final String title = marker.getTitle(); 
     final TextView titleUi = ((TextView) view.findViewById(R.id.title)); 
     if (title != null) { 
      titleUi.setText(title); 
     } else { 
      titleUi.setText(""); 
     } 

     final String snippet = marker.getSnippet(); 
     final TextView snippetUi = ((TextView) view.findViewById(R.id.snippet)); 
     if (snippet != null) { 
      snippetUi.setText(snippet); 
     } else { 
      snippetUi.setText(""); 
     } 
    } 
} 

Tôi cửa hàng Marker Id trong HashTable khi tôi thêm Marker. Và từ của họ, tôi sẽ nhận được URL của bức ảnh.

+0

Tùy chọn hiển thị? Cấu hình? Bạn có gọi 'displayImage (...)' trên chuỗi giao diện người dùng không? – NOSTRA

+0

Khi hiển thị (điểm đánh dấu cuối cùng, Chế độ xem xem), tôi đã gọi phương thức imageLoader.displayImage (....). –

Trả lời

9

Tôi đã thực hiện một đối tượng Marker ở cấp lớp và sử dụng đối tượng đó để cập nhật các thông tin Marker.

Tôi đã tùy chỉnh lớp học của tôi như dưới đây để cập nhật các ImageView:

private class CustomInfoWindowAdapter implements InfoWindowAdapter { 

    private View view; 

    public CustomInfoWindowAdapter() { 
     view = getLayoutInflater().inflate(R.layout.custom_info_window, null);   
    } 

    @Override 
    public View getInfoContents(Marker marker) { 

     if (YourClassName.this.marker != null && 
       ClassName.this.marker.isInfoWindowShown()) { 
      YourClassName.this.marker.hideInfoWindow(); 
      YourClassName.this.marker.showInfoWindow(); 
     } 
     return null; 
    } 

    @Override 
    public View getInfoWindow(final Marker marker) { 
     YourClassName.this.marker = marker; 

     final String url = markers.get(marker.getId()).getStrProfilePic(); 
     final ImageView image = ((ImageView) view.findViewById(R.id.badge)); 

     if (url != null && !url.equalsIgnoreCase("null") 
       && !url.equalsIgnoreCase("")) { 
      imageLoader.displayImage(url, image, options, new SimpleImageLoadingListener() { 
       @Override 
       public void onLoadingComplete(String imageUri, View view, 
         Bitmap loadedImage) { 
        super.onLoadingComplete(imageUri, view, loadedImage); 
        getInfoContents(marker); 
       } 
      }); 
     } else { 
      image.setImageResource(R.drawable.noimage); 
     } 

     final String title = marker.getTitle(); 
     final TextView titleUi = ((TextView) view.findViewById(R.id.title)); 
     if (title != null) { 
      titleUi.setText(title); 
     } else { 
      titleUi.setText(""); 
     } 

     final String snippet = marker.getSnippet(); 
     final TextView snippetUi = ((TextView) view.findViewById(R.id.snippet)); 
     if (snippet != null) { 
      snippetUi.setText(snippet); 
     } else { 
      snippetUi.setText(""); 
     } 

     return view; 
    } 
} 

Check the Example

+0

-Bạn có thể hiển thị nhiều bản đồ trong một ứng dụng không ?? –

+0

Trong ứng dụng của tôi, tôi không ave để hiển thị nhiều bản đồ. Nhưng trong Map2, có thể hiển thị nhiều bản đồ. Demo có sẵn trong sdk android với dịch vụ google play. –

+1

@NishantShah +1 cho câu trả lời của bạn nhưng. nếu bạn đăng url blog của bạn trong bình luận hơn nó sẽ dễ dàng hơn cho toàn bộ ví dụ :) http://androidfreakers.blogspot.in/ thanks :) –

3

Chế độ xem trả lại từ cửa sổ thông tin cuộc gọi lại không thể được cập nhật sau đó.

Hãy thử sau đây đề nghị này: Dynamic contents in Maps V2 InfoWindow