이미지 격자 업데이트를 처리하는이 이미지 어댑터가 있습니다. 문제는 URL에서 비트 맵을 가져 오는 BackgroundImageTask를 실행하고 있다는 것입니다. 백그라운드 태스크가 업데이트를 완료하기 전에 getView 메소드가 imageView를 리턴합니다. 어떻게하면 이미지 뷰를 반환하기 전에 백그라운드 작업을 강제 종료 할 수 있습니까? 귀하의 경우에는어댑터에서 백그라운드 작업을 사용하려면 어떻게해야합니까?
public class ImageAdapter extends BaseAdapter {
private Context mContext;
Bitmap bitmap;
List<Post> postList;
ImageView imageView;
int pos;
public ImageAdapter(Context c, List<Post> p) {
mContext = c;
postList = p;
}
public int getCount() {
return postList.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
pos=position;
View convert = convertView;
if (convert == null) {
// if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, 320));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(0, 0, 0, 0);
} else {
imageView = (ImageView) convert;
}
new BackgroundImageTask().execute();
return imageView;
}
public View SetBit(Bitmap b){
imageView.setImageBitmap(b);
return imageView;
}
class BackgroundImageTask extends AsyncTask<Void, Void, Bitmap> {
@Override
protected Bitmap doInBackground(Void... params) {
Bitmap bit1=bitmap;
try {
bit1 = BitmapFactory.decodeStream((InputStream)new URL(postList.get(pos).thumbnail).getContent());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bit1;
}
@Override
protected void onPostExecute(Bitmap bit) {
SetBit(bit);
}
}
}
같은 배경 작업에 이미지 뷰 개체를 전달할 수 있습니다? –
그것은 setadapter (ImageAdapter) 메소드의 위치에 따라 다릅니다. – nikeru8