2015-10-08 1 views
1

Я хочу показать progressBar для загрузки Image in Adapter для ListView. И когда изображение загружается progressBar не уходит, и изображение не отображается. Когда я прокручиваю вверх и вниз, он работает отлично. И я не знаю, как это сделать. Извините за мой английский. Я поставил скриншоты для лучшего понимания.Picasso with Adapter

Вот метод от адаптера:

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     ViewHolder viewHolder =null; 


     if(convertView==null){ 

      viewHolder = new ViewHolder(); 
      convertView = layoutInflater.inflate(R.layout.programs_item, null); 
      viewHolder.programName = (TextView) convertView.findViewById(R.id.programName); 
      viewHolder.programDuration = (TextView) convertView.findViewById(R.id.programDuration); 
      viewHolder.programImg = (ImageView) convertView.findViewById(R.id.programImg); 
      viewHolder.programImgLoading = (ProgressBar) convertView.findViewById(R.id.programImgLoading); 
      convertView.setTag(viewHolder); 

     } 
     else 
     { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     String name = getItem(position).getName(); 
     Log.d("NAMELOG", "" + getItem(position).getName()); 
     long duration1 = (getItem(position).getDuration()); 
     long duration = TimeUnit.SECONDS.toMinutes(duration1); 
     Log.d("TIMEEEE",""+duration+" "+duration1); 
     String duration2 = String.valueOf(duration)+ " min"; 
     viewHolder.programName.setText(name); 
     viewHolder.programDuration.setText(duration2); 

     File dir = new File(FILE_PATH); 

     File imgFile = new File(dir, getItemId(position) + ".png"); 

     if(imgFile.exists()){ 

      Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 

      viewHolder.setImg(myBitmap); 


     } 
     else if (isNetworkConnected()) { 

      Log.d("MYLOGGGGGGGG", MYurl.BASE_URL + "/" + String.valueOf(getItem(position).getImgLarge()) + ""); 
      final ViewHolder finalViewHolder = viewHolder; 
      Picasso.with(mContext) 
        .load(MYurl.BASE_URL + "/" + getItem(position).getImgMedium()) 
        .into(new Target() { 
         @Override 
         public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 

          finalViewHolder.programImgLoading.setVisibility(View.INVISIBLE); 
          finalViewHolder.setImg(bitmap); 


          File dir = new File(FILE_PATH); 
          if (!dir.exists()) 
           dir.mkdirs(); 
          File file = new File(dir, getItemId(position) + ".png"); 
          FileOutputStream fOut = null; 
          try { 
           Log.d("MYLOGSFILE", FILE_PATH + " " + file.getName()); 
           fOut = new FileOutputStream(file); 
          } catch (FileNotFoundException e) { 
           e.printStackTrace(); 
          } 

          bitmap.compress(Bitmap.CompressFormat.PNG, 80, fOut); 
          try { 
           fOut.flush(); 
          } catch (IOException e) { 
           e.printStackTrace(); 
          } 
          try { 
           fOut.close(); 
          } catch (IOException e) { 
           e.printStackTrace(); 
          } 



         } 


         @Override 
         public void onBitmapFailed(Drawable errorDrawable) { 
          finalViewHolder.programImg.setImageResource(R.drawable.noimage); 
         } 

         @Override 
         public void onPrepareLoad(Drawable placeHolderDrawable) { 
          finalViewHolder.programImg.setImageBitmap(null); 
          finalViewHolder.programImgLoading.setVisibility(View.VISIBLE); 
         } 
        }); 

     } 
     else{ 

      viewHolder.programImg.setImageResource(R.drawable.noimage); 




     } 


     return convertView; 
    } 

before scrolling

+0

в вашем методе onBitmapLoaded (Bitmap bitmap, Picasso.LoadedFrom from) попробуйте это: finalViewHolder.programImgLoading.setVisibility (View.GONE); – KERiii

+0

, что не помогает – Roman

+0

что-то вроде onBitmapLoaded не работает. – Roman

ответ

0

К сожалению, то, что вы хотите сделать в вашей Adpter?

if(imgFile.exists()){ 

     Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 

     viewHolder.setImg(myBitmap); 


    } Your decodnig image in UI thread. its bad pratis. 

Почему вы не используете пикассо для этого?

Дальше вы загружаете изображение в цель с помощью Picasso <, но не устанавливаете его. Вы сохранили файл на устройстве?

если вы Whot просто показать использование изображения Picasso справа:

calback=new Callback() { 
        @Override 
        public void onSuccess() { 
         if (progress != null) 
          progress.setVisibility(View.GONE); 
        } 

        @Override 
        public void onError() { 

         if (progress != null) 
          progress.setVisibility(View.GONE); 
        } 
       }); 
    if(imgFile.exists()){ 

     Picasso.with(mContext) 
       .load(imgFile) 
       .into(viewHolder.programImg,calback); 

    } 
    else if (isNetworkConnected()) { 
    Picasso.with(mContext) 
      .load(MYurl.BASE_URL + "/" + getItem(position).getImgMedium()) 
      .into(viewHolder.programImg,calback); 

или если вы сохраните изображение Загрузить изображение в цели и установить его в ImageView:

Picasso.with(mContext) 
       .load(imgFile) 
       .into(tagget,calback); 

Target target= new Target() { 
     @Override 
     public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) { 
      Runnable runnable= new Runnable() { 
       @Override 
       public void run() { 
        OutputStream imageOut = new FileOutputStream(new File("file")); 
        bitmap.compress(Bitmap.CompressFormat.JPEG, 50, imageOut); 
       } 
      }; 

      myThreadExecutor.execut(runnable); 
     } 

     @Override 
     public void onBitmapFailed(Drawable errorDrawable) { 

     } 

     @Override 
     public void onPrepareLoad(Drawable placeHolderDrawable) { 

     } 
    } 

Если вы хотите, можно использовать AsycTask , Но не сохраняйте изображения в UI terad. Также загружать изображения можно с помощью намеренияService и BroadcastReceiver

+0

Большое спасибо, но я не понимаю, как сохранить загруженное изображение на устройство с обратным вызовом ( – Roman

+0

, когда я использую Target, у меня такая же проблема с progressBar – Roman

+0

Picasso автоматически загружает изображения. Если вам нужно сохранить загрузку изображений, тогда следует использовать Target –

Смежные вопросы