1

Xamarin에서 및 이미지 웹 주소 목록이있는 Activity이 있습니다. Bitmap 개체 목록이 검색되어이 웹 주소의 GridView에 표시됩니다. Bitmaps 웹에서 검색 될 때까지 현재GridView에 비트 맵 이미지 표시

public class GridViewAdapter : BaseAdapter 
{ 
    Activity context; 
    List<Bitmap> gridViewtems; 

    public GridViewAdapter (Activity context, List<Bitmap> gridViewtems) 
    { 
     this.context = context; 
     this.gridViewtems = gridViewtems; 
    } 

    public override int Count { 
     get { return gridViewtems.Count; } 
    } 

    public override Java.Lang.Object GetItem (int position) 
    { 
     return null; 
    } 

    public override long GetItemId (int position) 
    { 
     return 0; 
    } 

    public override View GetView (int position, View convertView, ViewGroup parent) 
    { 
     View view = convertView; 
     if (view == null) 
      view = context.LayoutInflater.Inflate(Resource.Layout.GridViewItemWithImageAndText, null); 
     view.FindViewById<ImageView> (Resource.Id.image).SetImageBitmap (gridViewtems[position]); 
     view.FindViewById<TextView> (Resource.Id.text).Text = position.ToString(); 
     return view; 

    } 
} 

, 최대 응용 프로그램이로드, 화면에 아무 것도 나타나지 않음 :

여기
public class MainActivity : Activity 
{ 
    GridView gridView; 
    List<String> bitmapUris; 
    List<Bitmap> gridViewItems; 

    protected override void OnCreate (Bundle bundle) 
    { 
     base.OnCreate (bundle); 

     SetContentView (Resource.Layout.Main); 
     gridView = FindViewById<GridView>(Resource.Id.gridView); 

     bitmapUris = new List<string>(); 
     bitmapUris.Add ("http://images4.fanpop.com/image/photos/15000000/My-Sample-Pictures-lexi-and-sophie-15061826-1024-768.jpg"); 
     bitmapUris.Add ("http://www.cameraegg.org/wp-content/uploads/2013/08/AF-S-DX-NIKKOR-18-140mm-f-3.5-5.6G-ED-VR-sample-images-1.jpg"); 
     bitmapUris.Add ("http://upload.wikimedia.org/wikipedia/en/5/5d/The_Samples-Outpost.jpg"); 
     bitmapUris.Add ("http://www.1800postcards.com/images/samples/sample_kits2.jpg"); 

     gridViewItems = GetBitmapImages (bitmapUris); 
     gridView.Adapter = new GridViewAdapter (this, gridViewItems); 
    } 

    List<Bitmap> GetBitmapImages(List<String> bitmapUris) 
    { 
     List<Bitmap> images = new List<Bitmap>(); 
     Bitmap image; 
     foreach (var uri in bitmapUris) 
     { 
      image = GetImageBitmapFromUri (uri); 
      images.Add (image); 
     } 
     return images; 
    } 

    private Bitmap GetImageBitmapFromUri(string uri) 
    { 
     Bitmap imageBitmap = null; 

     using (var webClient = new WebClient()) 
     { 
      var imageBytes = webClient.DownloadData(uri); 
      if (imageBytes != null && imageBytes.Length > 0) 
      { 
       imageBitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length); 
      } 
     } 

     return imageBitmap; 
    } 
} 

GridViewAdapter 코드 : 여기

MainActivity 코드 구애.

내 질문은 : GridView 항목에 대한 자리 표시자를 사용하여 Activity을 표시 할 수 있으며 각 Bitmap이 검색되면 관련 GridView 항목 이미지가 채워 집니까? 이 작업은 MainActivity 또는 GridViewAdapter에서 수행됩니까?

+0

사용 게으른 로딩 http://stackoverflow.com/a/559781/964741 –

답변

2

시도 사전에

덕분에 당신의 GridView에 URL에서 이미지를 보여주는 범용 이미지 로더를 사용합니다.

이를 참조하십시오 https://github.com/nostra13/Android-Universal-Image-Loader

+0

감사합니다. Xamarin 프로젝트에 Universal Image Loader를 어떻게 추가합니까? 다운로드 폴더에는 .jar 파일이 많이 있습니다. – user3736648

+0

다운로드 ZIP 옵션은 last.When 당신이 libs 폴더에있는 src 폴더와 universal-image-loader-1.9.2-SNAPSHOT-with-sources.jar에있는 몇 개의 파일을 찾을 수 있습니다. 그 jar 파일을 사용해야합니다 –

+0

그 파일이 있습니까, Xamarin에서 클래스를 사용하려면 어디에 두어야합니까? – user3736648