Atualização do Android ListView de Miniaturas de Imagem usando o AsyncTask Causas Exibir reciclagem
Eu tenho tentado obter miniaturas para trabalhar com um AsyncTask para arquivos de imagem em um ListView. Eu tenho tido o problema comum de reciclagem de linha e, portanto, em miniaturas de rolagem estão sendo atribuídas a linhas erradas. Eu tentei adicionar tags para o ImageView e, em seguida, confirmando as tags no onPostExecute () no AsyncTask, mas no entanto foram malsucedidas em minhas tentativas. Alguém por favor me ajude!
O adaptador personalizado é o seguinte:
public class MySimpleAdapter extends SimpleAdapter {
public MySimpleAdapter(Context context,
List<? extends Map<String, ?>> data, int resource,
String[] from, int[] to) {
super(context, data, resource, from, to);
// TODO Auto-generated constructor stub
}
public View getView(int position, View convertView, ViewGroup parent) {
final View v = super.getView(position, convertView, parent);
thumbnail = (ImageView) v.findViewById(R.id.thumbnail);
checker = (CheckBox) v.findViewById(R.id.checkBox);
filenametext = (TextView) v.findViewById(R.id.text1);
String pathtoimage = startLocation.concat("/"
+ filenametext.getText().toString());
desctext = (TextView) v.findViewById(R.id.text2);
String temp = desctext.getText().toString();
if (temp.equals("Directory") == true) {
checker.setEnabled(false);
switch (theme) {
case 0:
thumbnail.setImageResource(R.drawable.folder_light);
break;
case 1:
thumbnail.setImageResource(R.drawable.folder_dark);
break;
}
} else {
checker.setEnabled(true);
if (filenametext.getText().toString().endsWith(".jpg")
|| filenametext.getText().toString().endsWith(".png")
|| filenametext.getText().toString().endsWith(".bmp")) {
Boolean hashmapfound = false;
for (HashMap.Entry<String, Bitmap> entry : thumbnaillist
.entrySet()) {
String key = entry.getKey();
if (key.equals(filenametext.getText().toString())) {
Log.d(TAG, "HashMapKey Found!");
thumbnail.setImageBitmap(entry.getValue());
hashmapfound = true;
}
}
if (!hashmapfound) {
Log.d(TAG, "NO HashMapKey Found! Adding to HashMap!");
switch (theme) {
case 0:
thumbnail
.setImageResource(R.drawable.unknown_image_light);
break;
case 1:
thumbnail
.setImageResource(R.drawable.unknown_image_dark);
break;
}
thumbnail.setTag((filenametext.getText().toString()));
new GetBitMaps(thumbnail).execute(pathtoimage,
filenametext.getText().toString());
}
} else {
switch (theme) {
case 0:
thumbnail.setImageResource(R.drawable.file_light);
break;
case 1:
thumbnail.setImageResource(R.drawable.file_dark);
break;
}
}
}
return v;
}
}
O AsyncTask é o seguinte:
class GetBitMaps extends AsyncTask<String, Void, Bitmap> {
private ImageView thumbnail;
private String imageName;
public GetBitMaps(ImageView thumb) {
// TODO Auto-generated constructor stub
thumbnail = thumb;
}
@Override
protected Bitmap doInBackground(String... pathtoimage) {
Bitmap bmp = createThumbnail(pathtoimage[0]);
thumbnaillist.put(pathtoimage[1], bmp);
imageName = pathtoimage[1];
return bmp;
}
@Override
protected void onPostExecute(Bitmap bmp) {
if (((String) thumbnail.getTag()).equals(imageName)) {
thumbnail.setImageBitmap(bmp);
}
}
private Bitmap createThumbnail(String filepath) {
Bitmap bmp = BitmapFactory.decodeFile(filepath);
int w = bmp.getWidth();
int h = bmp.getHeight();
if (w > h) {
w = 80;
h = 40;
} else if (w < h) {
w = 40;
h = 80;
}
bmp = Bitmap.createScaledBitmap(bmp, w, h, true);
return bmp;
}
}
Eu ainda não consigo descobrir o que mais fazer para obter as miniaturas para exibir as linhas corretas ao navegar.
Por favor Note: Depois de rolar para longe das linhas afetadas e rolar para baixo, as coisas funcionam bem, mas o problema de rolagem não está indo embora!