Ich bin neu bei Android, also nicht wirklich sicher, was ich hier falsch mache. Ich habe eine Gridview, in der ich eine Reihe von Bildern zeige, und ich verwende einen Adapter, um die Gridview zu füllen. Die Rasteransicht scrollte sehr langsam/lagy, also habe ich versucht, mit asynctask die Bildquelle für die Bildansichten zu setzen. Aus irgendeinem Grund erhalten die Bildansichten nicht die Ressource, daher werden sie nur leer angezeigt. Dies ist mein Code:Asynctask setzt keine Bildquelle für eine Bildansicht
class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
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) {
ImageView imageView;
if (convertView == null) {
// if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
imageView.setLayoutParams(new GridView.LayoutParams(width/2,(width/2)*515/400));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(0, 0, 0, 0);
} else {
imageView = (ImageView) convertView;
}
//imageView.setImageResource(mThumbIds[position]);
ImageSetter task=new ImageSetter(imageView);
task.execute(position);
return imageView;
}
// references to our images
private Integer[] mThumbIds = {
R.drawable.zsmall_artemis,R.drawable.zsmall_ash,R.drawable.zsmall_bane,R.drawable.zsmall_belle,R.drawable.zsmall_caleb,R.drawable.zsmall_falcyn,R.drawable.zsmall_jaden,R.drawable.zsmall_julien,R.drawable.zsmall_kody,
R.drawable.zsmall_mack,R.drawable.zsmall_maxis,R.drawable.zsmall_nero,R.drawable.zsmall_nick,R.drawable.zsmall_nykyrian
};
class ImageSetter extends AsyncTask<Integer,Void,Integer>{
private final WeakReference<ImageView> imageViewReference;
public ImageSetter(ImageView imageview){
imageViewReference=new WeakReference<ImageView>(imageview);
}
@Override
protected Integer doInBackground(Integer... ImagePos){
return mThumbIds[ImagePos[0]];
}
protected void onPostExecute(int ImageId){
if(isCancelled()){
ImageId=mThumbIds[0];
}
if(imageViewReference != null){
ImageView iview = imageViewReference.get();
if(iview != null){
iview.setImageResource(ImageId);
}
}
}
}
}
Das Bild Ressource-IDs alle in dem Array gespeichert sind, und ‚Position‘ verwendet wird, um anzuzeigen, welche Array-Element beziehe ich mich auf. Wie behebe ich das?
Muss die Variable ImageView den Wert korrigieren? Hast du das überprüft? –
Ich würde auch empfehlen, eine Bildbibliothek wie UniversalImageLoader oder Picasso –