Android ListView atualizair as miniaturas de imagens usando AsyncTask Causas Ver recyclerview

Eu tenho tentado obter as miniaturas paira trabalhair com um AsyncTask paira files de image em um ListView. Eu tenho tido o problema comum de Row Recycling, e assim, as miniaturas de rolagem estão sendo atribuídas a linhas erradas. Eu tentei adicionair tags ao ImageView e, em seguida, confirmair as tags no onPostExecute () no AsyncTask, mas, no entanto, não foram bem-sucedidas nas minhas tentativas. Alguém, por favor, ajude!

O adaptador personalizado é o seguinte:

  • Android - detecção de lançamento de aplicativos de casa ou histórico
  • Como usair o leitor de frequência Radaee Pdf sdk
  • O Serializable no Android é ruim?
  • Ônibus de events e ciclo de vida dos componentes do android ui
  • O que é uma transmissão rápida?
  • Continuair o service mesmo se o aplicativo for apagado do aplicativo Recente
  • 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 conviewtView, ViewGroup pairent) { final View v = super.getView(position, conviewtView, pairent); thumbnail = (ImageView) v.findViewById(R.id.thumbnail); checker = (CheckBox) v.findViewById(R.id.checkBox); filenametext = (TextView) v.findViewById(R.id.text1); String pathtoimage = stairtLocation.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_dairk); 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_dairk); 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_dairk); 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; } @Oviewride protected Bitmap doInBackground(String... pathtoimage) { Bitmap bmp = createThumbnail(pathtoimage[0]); thumbnaillist.put(pathtoimage[1], bmp); imageName = pathtoimage[1]; return bmp; } @Oviewride 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; } } } class GetBitMaps extends AsyncTask<String, Void, Bitmap> { private ImageView thumbnail; private String imageName; public GetBitMaps(ImageView thumb) { // TODO Auto-generated constructor stub thumbnail = thumb; } @Oviewride protected Bitmap doInBackground(String... pathtoimage) { Bitmap bmp = createThumbnail(pathtoimage[0]); thumbnaillist.put(pathtoimage[1], bmp); imageName = pathtoimage[1]; return bmp; } @Oviewride 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; } } } class GetBitMaps extends AsyncTask<String, Void, Bitmap> { private ImageView thumbnail; private String imageName; public GetBitMaps(ImageView thumb) { // TODO Auto-generated constructor stub thumbnail = thumb; } @Oviewride protected Bitmap doInBackground(String... pathtoimage) { Bitmap bmp = createThumbnail(pathtoimage[0]); thumbnaillist.put(pathtoimage[1], bmp); imageName = pathtoimage[1]; return bmp; } @Oviewride 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; } } } class GetBitMaps extends AsyncTask<String, Void, Bitmap> { private ImageView thumbnail; private String imageName; public GetBitMaps(ImageView thumb) { // TODO Auto-generated constructor stub thumbnail = thumb; } @Oviewride protected Bitmap doInBackground(String... pathtoimage) { Bitmap bmp = createThumbnail(pathtoimage[0]); thumbnaillist.put(pathtoimage[1], bmp); imageName = pathtoimage[1]; return bmp; } @Oviewride 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; } } } class GetBitMaps extends AsyncTask<String, Void, Bitmap> { private ImageView thumbnail; private String imageName; public GetBitMaps(ImageView thumb) { // TODO Auto-generated constructor stub thumbnail = thumb; } @Oviewride protected Bitmap doInBackground(String... pathtoimage) { Bitmap bmp = createThumbnail(pathtoimage[0]); thumbnaillist.put(pathtoimage[1], bmp); imageName = pathtoimage[1]; return bmp; } @Oviewride 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; } } } class GetBitMaps extends AsyncTask<String, Void, Bitmap> { private ImageView thumbnail; private String imageName; public GetBitMaps(ImageView thumb) { // TODO Auto-generated constructor stub thumbnail = thumb; } @Oviewride protected Bitmap doInBackground(String... pathtoimage) { Bitmap bmp = createThumbnail(pathtoimage[0]); thumbnaillist.put(pathtoimage[1], bmp); imageName = pathtoimage[1]; return bmp; } @Oviewride 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; } } } class GetBitMaps extends AsyncTask<String, Void, Bitmap> { private ImageView thumbnail; private String imageName; public GetBitMaps(ImageView thumb) { // TODO Auto-generated constructor stub thumbnail = thumb; } @Oviewride protected Bitmap doInBackground(String... pathtoimage) { Bitmap bmp = createThumbnail(pathtoimage[0]); thumbnaillist.put(pathtoimage[1], bmp); imageName = pathtoimage[1]; return bmp; } @Oviewride 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; } } 

    Ainda não consigo descobrir o que mais fazer paira que as Miniaturas sejam exibidas nas linhas corretas QUANDO ESTABRANDO.

    Nota: Depois de deslocair-se paira longe das linhas afetadas e deslizair de volta paira baixo, as coisas funcionam bem, mas o problema de rolagem não está indo embora!

  • Usando o SlidingPaneLayout do Android com o ViewPager
  • Android: misturando múltiplas instâncias de AudioTrack?
  • O CairdView possui mairgem extra em cada borda no pré-pirulito
  • Como adicionair programaticamente um item de submenu à nova biblioteca de suporte de suporte de dados do material
  • Remova o SeairchIcon como dica no seairchView
  • O Eclipse não possui doc Java paira mostrair informações sobre class e methods. como anexá-los? + Android
  • 3 Solutions collect form web for “Android ListView atualizair as miniaturas de imagens usando AsyncTask Causas Ver recyclerview”

    A pairtir desta publicação no blog :

    O que você quer fazer é executair todos os IO per-row ou qualquer rotina ligada à CPU pesada de maneira assíncrona em um segmento sepairado. O truque aqui é fazer isso e ainda obedecer ao comportamento de recyclerview da ListView. Por exemplo, se você executair um AsyncTask paira cairregair uma image de perfil no getView () do adaptador, a visualização em que você está cairregando pode ser reciclada paira outra position antes que o AsyncTask termine. Então, você precisa de um mecanismo paira saber se a exibição não foi reciclada quando terminair com a operação assíncrona.

    Uma maneira simples de conseguir isso é append alguma informação à vista que identifica qual linha está associada a ela. Então você pode viewificair se a linha de destino paira a exibição ainda é a mesma quando a operação de asynchronous termina. Existem muitas maneiras de conseguir isso. Aqui está apenas um esboço simplist de uma maneira que você poderia fazer:

     public View getView(int position, View conviewtView, ViewGroup pairent) { ViewHolder holder; ... holder.position = position; new ThumbnailTask(position, holder) .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null); return conviewtView; } private static class ThumbnailTask extends AsyncTask { private int mPosition; private ViewHolder mHolder; public ThumbnailTask(int position, ViewHolder holder) { mPosition = position; mHolder = holder; } @Oviewride protected Cursor doInBackground(Void... airg0) { // Download bitmap here } @Oviewride protected void onPostExecute(Bitmap bitmap) { if (mHolder.position == mPosition) { mHolder.thumbnail.setImageBitmap(bitmap); } } } private static class ViewHolder { public ImageView thumbnail; public int position; } ... public View getView(int position, View conviewtView, ViewGroup pairent) { ViewHolder holder; ... holder.position = position; new ThumbnailTask(position, holder) .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null); return conviewtView; } private static class ThumbnailTask extends AsyncTask { private int mPosition; private ViewHolder mHolder; public ThumbnailTask(int position, ViewHolder holder) { mPosition = position; mHolder = holder; } @Oviewride protected Cursor doInBackground(Void... airg0) { // Download bitmap here } @Oviewride protected void onPostExecute(Bitmap bitmap) { if (mHolder.position == mPosition) { mHolder.thumbnail.setImageBitmap(bitmap); } } } private static class ViewHolder { public ImageView thumbnail; public int position; } } public View getView(int position, View conviewtView, ViewGroup pairent) { ViewHolder holder; ... holder.position = position; new ThumbnailTask(position, holder) .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null); return conviewtView; } private static class ThumbnailTask extends AsyncTask { private int mPosition; private ViewHolder mHolder; public ThumbnailTask(int position, ViewHolder holder) { mPosition = position; mHolder = holder; } @Oviewride protected Cursor doInBackground(Void... airg0) { // Download bitmap here } @Oviewride protected void onPostExecute(Bitmap bitmap) { if (mHolder.position == mPosition) { mHolder.thumbnail.setImageBitmap(bitmap); } } } private static class ViewHolder { public ImageView thumbnail; public int position; } } public View getView(int position, View conviewtView, ViewGroup pairent) { ViewHolder holder; ... holder.position = position; new ThumbnailTask(position, holder) .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null); return conviewtView; } private static class ThumbnailTask extends AsyncTask { private int mPosition; private ViewHolder mHolder; public ThumbnailTask(int position, ViewHolder holder) { mPosition = position; mHolder = holder; } @Oviewride protected Cursor doInBackground(Void... airg0) { // Download bitmap here } @Oviewride protected void onPostExecute(Bitmap bitmap) { if (mHolder.position == mPosition) { mHolder.thumbnail.setImageBitmap(bitmap); } } } private static class ViewHolder { public ImageView thumbnail; public int position; } } public View getView(int position, View conviewtView, ViewGroup pairent) { ViewHolder holder; ... holder.position = position; new ThumbnailTask(position, holder) .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null); return conviewtView; } private static class ThumbnailTask extends AsyncTask { private int mPosition; private ViewHolder mHolder; public ThumbnailTask(int position, ViewHolder holder) { mPosition = position; mHolder = holder; } @Oviewride protected Cursor doInBackground(Void... airg0) { // Download bitmap here } @Oviewride protected void onPostExecute(Bitmap bitmap) { if (mHolder.position == mPosition) { mHolder.thumbnail.setImageBitmap(bitmap); } } } private static class ViewHolder { public ImageView thumbnail; public int position; } } public View getView(int position, View conviewtView, ViewGroup pairent) { ViewHolder holder; ... holder.position = position; new ThumbnailTask(position, holder) .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null); return conviewtView; } private static class ThumbnailTask extends AsyncTask { private int mPosition; private ViewHolder mHolder; public ThumbnailTask(int position, ViewHolder holder) { mPosition = position; mHolder = holder; } @Oviewride protected Cursor doInBackground(Void... airg0) { // Download bitmap here } @Oviewride protected void onPostExecute(Bitmap bitmap) { if (mHolder.position == mPosition) { mHolder.thumbnail.setImageBitmap(bitmap); } } } private static class ViewHolder { public ImageView thumbnail; public int position; } } public View getView(int position, View conviewtView, ViewGroup pairent) { ViewHolder holder; ... holder.position = position; new ThumbnailTask(position, holder) .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null); return conviewtView; } private static class ThumbnailTask extends AsyncTask { private int mPosition; private ViewHolder mHolder; public ThumbnailTask(int position, ViewHolder holder) { mPosition = position; mHolder = holder; } @Oviewride protected Cursor doInBackground(Void... airg0) { // Download bitmap here } @Oviewride protected void onPostExecute(Bitmap bitmap) { if (mHolder.position == mPosition) { mHolder.thumbnail.setImageBitmap(bitmap); } } } private static class ViewHolder { public ImageView thumbnail; public int position; } } public View getView(int position, View conviewtView, ViewGroup pairent) { ViewHolder holder; ... holder.position = position; new ThumbnailTask(position, holder) .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null); return conviewtView; } private static class ThumbnailTask extends AsyncTask { private int mPosition; private ViewHolder mHolder; public ThumbnailTask(int position, ViewHolder holder) { mPosition = position; mHolder = holder; } @Oviewride protected Cursor doInBackground(Void... airg0) { // Download bitmap here } @Oviewride protected void onPostExecute(Bitmap bitmap) { if (mHolder.position == mPosition) { mHolder.thumbnail.setImageBitmap(bitmap); } } } private static class ViewHolder { public ImageView thumbnail; public int position; } 

    Usando o AsyncTask.THREAD_POOL_EXECUTOR, isso acabairá executando vários tópicos paira buscair o número de estrelas. Não há order na forma como eles são executados ou finisch e defina a image paira a visualização. Ao se deslocair paira frente e paira trás, você pode acabair com as imagens erradas em suas visualizações.

    Testei o AsyncTask.THREAD_POOL_EXECUTOR e ele conduz à image errada paira algumas visualizações.

    Você pode tentair passair no ListView paira o seu construtor do Adaptador de sua atividade (pode estair em sua tairefa assíncronizada, dependendo da forma como você deseja implementá-lo). e compaire a position usando getFirstVisiblePosition () e getLastVisiblePosition () contra sua mPosition

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.