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
감사합니다!
저는 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; –
내가 생각할 수있는 것 외는, 각 루프마다 ~ for regular 루프로 변경하는 것뿐. –
그것은 작동합니다! 아마도 각 루프마다 포인터 대상을 변경할 수 없습니다. –