Android - 即使已加载图像也不会显示

问题描述:

我设置了我的图像查看​​3210,my layout height to wrapcontent。 imageview的图像通过url加载。发生的事情是,当我绘制视图的时候,由于图像尚未加载,它只会绘制layout_width。但在图像已经加载时,高度不再绘制,因此不会显示图像。它只会显示,如果我来回滚动,因为,我想那是视图将重绘的时间。有什么办法可以解决这个问题吗?使用invalidate()没有工作。也许我做错了吗?Android - 即使已加载图像也不会显示

我会刚刚发布的我的代码片段: 这是getView的MyAdapter延伸BaseAdapter:

public View getView(int position, View convertView, ViewGroup parent){ 
    ViewHolder holder = null; 

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

    Typeface typeFaceMyriadReg = Typeface.createFromAsset(context.getAssets(), MYRIAD_REG); 


    if(convertView == null){ 
     convertView = inflater.inflate(R.layout.shop_list_layout, null); 
     holder = new ViewHolder(); 
     holder.txtShopName = (TextView) convertView.findViewById(R.id.name); 
     holder.txtShopName.setTypeface(typeFaceMyriadReg); 
     holder.txtShopDesc = (TextView) convertView.findViewById(R.id.desc); 
     holder.txtShopDesc.setTypeface(typeFaceMyriadReg); 
     holder.imageView = (ImageView) convertView.findViewById(R.id.prof_pic); 
     holder.progBar = (ProgressBar) convertView.findViewById(R.id.img_progress); 



     convertView.setTag(holder); 
    }else{ 
     holder = (ViewHolder) convertView.getTag(); 
    } 
     imageLoader=new ImageLoader(context.getApplicationContext(), holder.progBar); 

    ShopRowItem shopItem = (ShopRowItem) getItem(position); 

    holder.txtShopName.setText(shopItem.getShopName()); 
    holder.txtShopDesc.setText(shopItem.getShopDesc()); 
    imageLoader.DisplayImage(shopItem.getImageUrl(), holder.imageView); 

    return convertView; 
} 

那么ImageLoder的一部分:

public void DisplayImage(String url, ImageView imageView) 
{ 
    imageViews.put(imageView, url); 
    Bitmap bitmap=memoryCache.get(url); 
    if(bitmap!=null){ 
     imageView.setImageBitmap(bitmap); 
     progressBar.setVisibility(View.VISIBLE); 
    } 
    else 
    { 
     queuePhoto(url, imageView); 
     progressBar.setVisibility(View.VISIBLE); 

    } 
} 

// ... 
// ... 

    //Used to display bitmap in the UI thread 
class BitmapDisplayer implements Runnable 
{ 
    Bitmap bitmap; 
    PhotoToLoad photoToLoad; 
    public BitmapDisplayer(Bitmap b, PhotoToLoad p){bitmap=b;photoToLoad=p;} 
    public void run() 
    { 
     if(imageViewReused(photoToLoad)) 
      return; 
     if(bitmap!=null){ 

      //should i do recalculations and adjustments here? ? ? 

      photoToLoad.imageView.setImageBitmap(bitmap); 
      progressBar.setVisibility(View.GONE); 
     } 
     else{ 
       photoToLoad.imageView.setImageResource(stub_id); 
       progressBar.setVisibility(View.VISIBLE); 
     } 
    } 
} 

可以解决这个问题通过在你的图像视图中放置一些加载图像,直到你从服务器上获取图像数据..

public void DisplayImage(String url, ImageView imageView) 
{ 
imageViews.put(imageView, url); 
Bitmap bitmap=memoryCache.get(url); 
if(bitmap!=null){ 
    imageView.setImageBitmap(bitmap); 
    progressBar.setVisibility(View.VISIBLE); 
} 
else 
{ 
    queuePhoto(url, imageView); 
//add this line of code here..... 
    imageView.setImageResource(R.drawable.your_image_placeholder); 
    progressBar.setVisibility(View.VISIBLE); 

} 
}