列表视图中的延迟加载图像非常慢

时间:2014-06-10 04:45:57

标签: android listview android-listview

我想在ListView中显示图像。图像来自url。我能够在ListView中成功显示图像,但问题是,图像加载非常慢,当我滚动ListView时,之前的图像消失了。请告诉我代码中的错误在哪里:< / p>

LazyAdapter

public class LazyAdapter extends BaseAdapter{

static Context context;
 private TextView timeTextView;
 private ListView listView;
 private ImageView imageView2;
 private TextView addressTxtView;
 private TextView dateTextView;
 private Button shareBtn;
 private Button mapButton;
 private String mydate;
 private TextView headTextView;

 private String imageurl[]=null;

DisplayImageOptions doption=null;
private ImageLoadingListener animateFirstListener =null;


private Integer[] 
 images=new Integer[]{R.drawable.citytraffic,0,0,0,0,0,0,0,0,0};



 // static ImageLoader imageLoader = ImageLoader.getInstance();

public LazyAdapter(Context c,String[] url){
    context=c;
    this.imageurl=url;


}


@Override
public int getCount() {
    // TODO Auto-generated method stub
    return images.length;
}

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    mydate = java.text.DateFormat.getDateTimeInstance().
         format(Calendar.getInstance().getTime());
    LayoutInflater inflater=(LayoutInflater)context. 
       getSystemService(context.LAYOUT_INFLATER_SERVICE);
    View v=inflater.inflate(R.layout.custom_data_list, null);
    shareBtn=(Button)v.findViewById(R.id.shareBtn);
    mapButton=(Button)v.findViewById(R.id.reportBtn);
    imageView2=(ImageView) v.findViewById(R.id.imageView2);

//  
     animateFirstListener = new AnimateFirstDisplayListener();
     addressTxtView=(TextView) v.findViewById(R.id.adddTextId);
     headTextView  = (TextView)v.findViewById(R.id.headTextId);
     addressTxtView.setText("Munirabad-Medchal Road, Secunderabad, Andhra Pradesh 502401,               
          India");

     dateTextView=(TextView) v.findViewById(R.id.dateTextId);
     dateTextView.setText(mydate);
     headTextView.setText("Traffic Jam At");
     ImageLoader imageLoader = ImageLoader.getInstance();
     imageLoader.displayImage("", imageView2);
     imageLoader.displayImage(imageurl[position], imageView2, animateFirstListener);




    return v;
}
private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener {

    static final List<String> displayedImages = Collections.synchronizedList(new 
  LinkedList<String>());

    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        if (loadedImage != null) {
            ImageView imageView = (ImageView) view;
            boolean firstDisplay = !displayedImages.contains(imageUri);
            if (firstDisplay) {
                FadeInBitmapDisplayer.animate(imageView, 500);
                displayedImages.add(imageUri);
            }
        }
    }
}
 }

活性

 public class JamLocationsActivity extends Activity {

 String[] names={"durga1","durga2","durga3"};
 static  String uri1="https://i3.ytimg.com/vi/bQaWsVQSLdY/default.jpg";
 static String uri2="https://i4.ytimg.com/vi/cJQCniWQdno/mqdefault.jpg";
 static String uri3="https://i1.ytimg.com/vi/D8dA4pE5hEY/mqdefault.jpg";
 public static String[] urls={uri1,uri2,uri3};
 private TextView addTextView;
 private TextView timeTextView;
 private ListView listView;
 private ImageView iv;
 private TextView tv1;
 private TextView tv2;
 private Button shareBtn;
 private Button mapButton;
 private String mydate;
 private TextView headTextView;
 private String[] imageUrls;


private Integer[] images;
private static ImageLoader imageLoader=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
      ActionBar bar = getActionBar();
         bar.setDisplayShowHomeEnabled(false);
         bar.setDisplayShowTitleEnabled(false);
         bar.setDisplayShowCustomEnabled(true);
        bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#ffffff")));
        imageUrls=Constants.IMAGES;

        getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
        getActionBar().setCustomView(R.layout.action_bar_jamlocation);
       setContentView(R.layout.activity_jam_locations);
      /* Bundle bundle = getIntent().getExtras();
        imageUrls = bundle.getStringArray("stringarrayimage");*/
       imageLoader = ImageLoader.getInstance();

   JamLocationsActivity.imageLoader.init(ImageLoaderConfiguration.createDefault(this));
        String s= "";  
        int i=0;
        i=Integer.parseInt(s+0);
        Log.e("INT VAL","  "+  i);
   // images=new Integer[]{R.drawable.citytraffic,i,i,i,0,0,0,0,0,0};

 LazyAdapter adapter = new LazyAdapter(JamLocationsActivity.this,imageUrls);

    listView=(ListView)findViewById(R.id.listView1);
    listView.setAdapter(adapter);
  }
}

1 个答案:

答案 0 :(得分:1)

首先,您应该使用ViewHolder design pattern。它使您的滚动更加流畅并节省了内存。

然后看this post。那里有很多有用的东西,比如缓存图像。

最后,您可以使用Picasso来加载和显示图像!