0

I want to show images in ListView. The images come from url.I am able to successfully show images in ListView but problem is, loading of images is very slow and when I scroll the ListView, the previous images get disappeared.Please tell me where is the mistake in my code :

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);
            }
        }
    }
}
 }

activity

 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);
  }
}
AndyN
  • 1,742
  • 1
  • 15
  • 30

1 Answers1

1

First, you should use ViewHolder design pattern. It makes your scroll more smooth and saves the memory.

Then see this post. There are quite many useful things there, such as caching images.

Finally, you саn use Picasso that loads and shows images just great!

Community
  • 1
  • 1
anil
  • 2,083
  • 21
  • 37