2016-07-06 53 views
2

我跟着本課here哪位大家討論json解析和圖片加載列表視圖這個例子效果不錯,但是在圖片查看時有一個問題,滾動起來&所有圖片重新加載,所以任何人都可以解決這個問題?從列表視圖json緩存圖像?

這個列表視圖

package com.wingnity.jsonparsingtutorial; 

import java.io.InputStream; 
import java.util.ArrayList; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class ActorAdapter extends ArrayAdapter<Actors> { 
    ArrayList<Actors> actorList; 
    LayoutInflater vi; 
    int Resource; 
    ViewHolder holder; 

    public ActorAdapter(Context context, int resource, ArrayList<Actors> objects) { 
     super(context, resource, objects); 
     vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     Resource = resource; 
     actorList = objects; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // convert view = design 
     View v = convertView; 
     if (v == null) { 
      holder = new ViewHolder(); 
      v = vi.inflate(Resource, null); 
      holder.imageview = (ImageView) v.findViewById(R.id.ivImage); 
      holder.tvName = (TextView) v.findViewById(R.id.tvName); 
      holder.tvDescription = (TextView) v.findViewById(R.id.tvDescriptionn); 
      holder.tvDOB = (TextView) v.findViewById(R.id.tvDateOfBirth); 
      holder.tvCountry = (TextView) v.findViewById(R.id.tvCountry); 
      holder.tvHeight = (TextView) v.findViewById(R.id.tvHeight); 
      holder.tvSpouse = (TextView) v.findViewById(R.id.tvSpouse); 
      holder.tvChildren = (TextView) v.findViewById(R.id.tvChildren); 
      v.setTag(holder); 
     } else { 
      holder = (ViewHolder) v.getTag(); 
     } 
     holder.imageview.setImageResource(R.drawable.ic_launcher); 
     new DownloadImageTask(holder.imageview).execute(actorList.get(position).getImage()); 
     holder.tvName.setText(actorList.get(position).getName()); 
     holder.tvDescription.setText(actorList.get(position).getDescription()); 
     holder.tvDOB.setText("B'day: " + actorList.get(position).getDob()); 
     holder.tvCountry.setText(actorList.get(position).getCountry()); 
     holder.tvHeight.setText("Height: " + actorList.get(position).getHeight()); 
     holder.tvSpouse.setText("Spouse: " + actorList.get(position).getSpouse()); 
     holder.tvChildren.setText("Children: " + actorList.get(position).getChildren()); 
     return v; 

    } 

    static class ViewHolder { 
     public ImageView imageview; 
     public TextView tvName; 
     public TextView tvDescription; 
     public TextView tvDOB; 
     public TextView tvCountry; 
     public TextView tvHeight; 
     public TextView tvSpouse; 
     public TextView tvChildren; 

    } 

    private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
     ImageView bmImage; 

     public DownloadImageTask(ImageView bmImage) { 
      this.bmImage = bmImage; 
     } 
     protected Bitmap doInBackground(String... urls) { 
      String urldisplay = urls[0]; 
      Bitmap mIcon = null; 
      try { 
       InputStream in = new java.net.URL(urldisplay).openStream(); 
       mIcon = BitmapFactory.decodeStream(in); 
      } catch (Exception e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 
      return mIcon; 
     } 

     protected void onPostExecute(Bitmap result) { 
      bmImage.setImageBitmap(result); 
     } 
    } 
} 

回答

0

的用過Android通用圖像下載器適配器,這是最佳

聲明

private ImageLoader imageLoader1; 

在克雷亞TE

imageLoader1 = ImageLoader.getInstance(); 

imageLoader1.init(ImageLoaderConfiguration.createDefault(getActivity())); 

no_image在這裏緩存,沒有任何圖像負荷繪製的圖像

DisplayImageOptions 
      options = new DisplayImageOptions.Builder() 
      .cacheInMemory(true) 
      .cacheOnDisk(true) 
      .showImageOnLoading(R.drawable.no_image) // resource or drawable 
      .showImageForEmptyUri(R.drawable.no_image) // resource or drawable 
      .showImageOnFail(R.drawable.no_image) 
      .considerExifParams(true) 
      .bitmapConfig(Bitmap.Config.RGB_565) 
      .build(); 

    imageLoader1.displayImage(yourpath.replace(" ", "%20"), ivprofile, options); 

您可以使用Piccaso也和滑翔也

+0

非常感謝你 –

0

這裏是代碼編輯後它就像一個魅力

import java.util.List; 

import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

import com.android.volley.toolbox.ImageLoader; 
import com.android.volley.toolbox.NetworkImageView; 

public class ActorAdapter extends BaseAdapter { 
    private Activity activity; 
    private LayoutInflater inflater; 
    private List<Actors> movieItems; 
    ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 

    public ActorAdapter(Activity activity, List<Actors> movieItems) { 
     this.activity = activity; 
     this.movieItems = movieItems; 
    } 

    @Override 
    public int getCount() { 
     return movieItems.size(); 
    } 

    @Override 
    public Object getItem(int location) { 
     return movieItems.get(location); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

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

     if (inflater == null) 
      inflater = (LayoutInflater) activity 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) 
      convertView = inflater.inflate(R.layout.list_item, null); 

     if (imageLoader == null) 
      imageLoader = AppController.getInstance().getImageLoader(); 
     NetworkImageView thumbNail = (NetworkImageView) convertView 
       .findViewById(R.id.flag); 
     TextView title = (TextView) convertView.findViewById(R.id.rank); 

     // getting movie data for the row 
     Actors m = movieItems.get(position); 

     // thumbnail image 
     thumbNail.setImageUrl(m.getImage(), imageLoader); 

     // title 
     title.setText(m.getName()); 


     return convertView; 
    } 

}