2017-12-07 2 views
0

Ich benutze die Universal Image Loader-Bibliothek, um Bilder vom Server in meiner Recycler-Ansicht einzustellen. In meiner Recycler-Ansicht, wenn ich anfange, darauf zu scrollen, wird es für ein paar Sekunden nicht zusammenhängende Bilder einrichten und danach wird es ein echtes Bild setzen. Ich weiß nicht, wo das Problem ist.Universal Image Loader Set nicht verwandte Bilder

Das ist mein Adapter, dass ich mit:

public class HistoryDetailAdapter extends RecyclerView.Adapter<HistoryDetailAdapter.ViewHolder> { 
    private List<PList> menuItems; 
    private Context mContext; 
    private ActivityHistoryDetails activityHistoryDetails; 
    private DisplayImageOptions defaultOptions; 
    private ImageLoaderConfiguration config; 

    public HistoryDetailAdapter(List<PList> menuItems, Context mContext) { 
    this.menuItems = menuItems; 
    this.mContext = mContext; 
    this.activityHistoryDetails = (ActivityHistoryDetails) mContext; 

    byte[] toEncrypt = (G.getPremiumState()[0] + ":" + G.getPremiumState()[1]).getBytes(); 
    String encryptedCredentials = Base64.encodeToString(toEncrypt, Base64.DEFAULT); 
    Map<String, String> headers = new HashMap(); 
    headers.put("Authorization", "Basic " + encryptedCredentials); 

    defaultOptions = new DisplayImageOptions.Builder() 
     .cacheInMemory(false) 
     .cacheOnDisk(false) 
     .resetViewBeforeLoading(true) 
     .delayBeforeLoading(5000) 
     .showImageOnLoading(R.drawable.loading_02) 
     .showImageOnFail(R.drawable.ic_empty_white_box) 
     .extraForDownloader(headers) 
     .build(); 

    config = new ImageLoaderConfiguration.Builder(activityHistoryDetails) 
     .defaultDisplayImageOptions(defaultOptions) 
     .imageDownloader(new AuthDownloader(activityHistoryDetails)) 
     .build(); 

    } 

    public static class ViewHolder extends RecyclerView.ViewHolder { 

    ImageView imgDefault; 
    LinearLayout parentLayout; 
    CoordinatorLayout coordinatorLayout; 

    public ViewHolder(View v) { 
     super(v); 


     imgDefault = (ImageView) v.findViewById(R.id.img_defaultImage); 
     parentLayout = (LinearLayout) v.findViewById(R.id.parentLayout); 
     coordinatorLayout = (CoordinatorLayout) v.findViewById(R.id.coordinatorLayout); 

    } 
    } 

    @Override 
    public HistoryDetailAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    // Create a new View 
    final View v = LayoutInflater.from(activityHistoryDetails).inflate(R.layout.activity_history_detail_recycler, parent, false); 
    ViewHolder vh = new ViewHolder(v); 
    return vh; 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, final int position) { 

    //Download and Load Default Image from server into imgDefault ImageView 
    String url = "http://192.168.14.77:8080/api/images/download/"; 

    if (menuItems.get(position).getPDefaultImage().getIId() != null) { 

     url += menuItems.get(position).getPDefaultImage().getIId(); 

     ImageLoader imageLoader = ImageLoader.getInstance(); // Get singleton instance 
     imageLoader.init(config); 
     imageLoader.handleSlowNetwork(true); 

     // Load image, decode it to Bitmap and return Bitmap to callback 
     ImageSize targetSize = new ImageSize(120, 120); // result Bitmap will be fit to this size 
     imageLoader.loadImage(url, targetSize, new SimpleImageLoadingListener() { 
     @Override 
     public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
      // Do whatever you want with Bitmap 
      holder.imgDefault.setImageBitmap(loadedImage); 
     } 
     }); 

    } else { 
     holder.imgDefault.setImageResource(R.drawable.loading_01); 
    } 

    } 

    @Override 
    public int getItemCount() { 
    if (menuItems.size() > 0) { 

     return menuItems.size(); 

    } else { 
     return 0; 
    } 

    } 

    public List<PList> getList() { 
    return menuItems; 
    } 
} 

Dank für Ihre Antworten danken.

Antwort

1

Sie können Glide oder Fresco Bildbibliothek dafür verwenden. Sie arbeiten stabil.

+0

Ich benutzte Picasso, aber es funktioniert nicht gut für mich – Ehsan

+0

Sie warten Bild herunterladen hier abgeschlossen. Glide machen es leicht. Dies ist eine einfache Verwendung. GlideApp.with (this) .load (yourur) .into (imageView); –

Verwandte Themen