2014-11-23 2 views
0

ImageLoaderConfiguration 라이브러리를 사용하여 이미지를 Bitmap 객체로 다운로드하는 액티비티를 작성했습니다. 그건 괜찮아.android - 어댑터의 항목 (위치)이 null을 반환합니다.

내 다음 단계는 5 개의 GalleryItem 개체를 만들고 그 개체에 Bitmap을 넣는 것입니다.

마지막으로 ArrayAdapter를 확장하는 GalleryItemAdapter 객체를 만들었습니다.

문제는 getView 함수에서 getItem(position)이 null을 반환한다는 것입니다. 여기

코드입니다 :

mainActivity :

package com.example.downloadimages; 

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 

import com.nostra13.universalimageloader.core.ImageLoader; 
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; 
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; 

import android.graphics.Bitmap; 
import android.widget.ArrayAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 

public class MainActivity extends ActionBarActivity { 

    public String mUrl; 
    public Byte [] mImageBytes; 
    GalleryItem [] mGalleryItem; 
    Bitmap mBitmap; 
    public GridView mGridView; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
       setContentView(R.layout.image_view_in_layout); 
       mGridView = (GridView) findViewById(R.id.gridView); 
       mUrl = "http://www.royalcanin.in/var/royalcanin/storage/images/breeds/cat-breeds/norwegian-forest-cat/19311843-15-eng-GB/norwegian-forest-cat_cat_breed_cat_picture.jpg"; 

       ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this) .build(); 
       ImageLoader.getInstance().init(config); 
       ImageLoader.getInstance().loadImage(mUrl, new SimpleImageLoadingListener(){ 
        @Override 
        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
         mBitmap = loadedImage; 
         mGalleryItem = new GalleryItem[5]; 
         for(GalleryItem gi : mGalleryItem) 
         { 
          gi = new GalleryItem(); 
          gi.setBitmap(mBitmap); 
         } 
         setupAdapter(); 
        } 
       }); 
     } 

     void setupAdapter() 
     { 
      if (mGridView == null) return; 
      mGridView.setAdapter(new GalleryItemAdapter(mGalleryItem)); 
     } 

     private class GalleryItemAdapter extends ArrayAdapter<GalleryItem> 
     { 
      public GalleryItemAdapter(GalleryItem[] mGalleryItem) 
      { 
       super(getApplicationContext(), 0, mGalleryItem); 
      } 

      @Override 
      public View getView(int position, View convertView, ViewGroup parent) 
      { 
       convertView = (ImageView)findViewById(R.id.imageView1); 
       GalleryItem item = getItem(position); 
       ((ImageView) convertView).setImageBitmap(item.getBitmap()); 
       return convertView; 
      } 
     } 
} 

클래스 GalleryItem :

public class GalleryItem { 

    Bitmap bitmap; 

    public Bitmap getBitmap() { 
     return bitmap; 
    } 

    public void setBitmap(Bitmap bitmap) { 
     this.bitmap = bitmap; 
    } 
} 

image_view_in_layout :

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

    <GridView 
     android:id="@+id/gridView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:columnWidth="120dp" 
     android:numColumns="auto_fit" 
     android:stretchMode="columnWidth" > 

    </GridView> 
    </LinearLayout 

감사합니다!

답변

0

어댑터 코드가 잘못되었습니다. 당신은 활동 xml의 ImageView에 비트 맵을 설정하려고합니다. 어댑터에 새 ImageView를 만들고 반환해야합니다. 여기에서 볼 수 있습니다 https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView

+0

저는 getView 메소드 코드를 변경했고, 여전히 작업량을 줄였습니다. 이것은 새로운 코드입니다 : GalleryItem item = getItem (position); \t \t \t \t convertView = LayoutInflater.from (getContext()). inflate (R.layout.image_view_in_layout, parent, false); \t \t \t \t ImageView im = (ImageView) convertView.findViewById (R.id.imageView1); \t \t \t \t im.setImageBitmap (item.getBitmap()); \t \t \t \t return convertView; –

+1

내가 생각할 수있는 것 외는, 각 루프마다 ~ for regular 루프로 변경하는 것뿐. –

+0

그것은 작동합니다! 아마도 각 루프마다 포인터 대상을 변경할 수 없습니다. –

관련 문제