2014-06-10 4 views
0

Я хочу показать изображения в ListView. Изображения поступают из url.I можно успешно показывать изображения в ListView, но проблема в том, что загрузка изображений происходит очень медленно, и когда я просматриваю ListView, предыдущие изображения исчезают. Пожалуйста, скажите мне, где ошибка в моем коде:LazyLoading изображения в listview очень медленные

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

Этот класс ImageLoader реализует Caching et al? – saopayne

+0

Используйте шаблон ViewHolder для лучшей производительности. – Piyush

ответ

1

Во-первых, вы должны использовать ViewHolder design pattern. Это делает ваш свиток более гладким и сохраняет память.

Тогда см. this post. Там очень много полезных вещей, таких как кеширование изображений.

Наконец, вы можете использовать Picasso, который загружает и показывает изображения просто великолепно!

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