2011-02-15 61 views
2

您好我有一个自定义列表视图包含一个图像和textview,我正在使用处理程序的ListView的适配器的列表视图加载图像,当所有的图像加载,然后我改变我的手机的方向图像再次开始下载,我想阻止这一个,即当所有的图像加载,并且当我的方向改变时,它不起作用。android列表查看图片载入中

public View getView(final int position, View convertView, ViewGroup parent) { 
     final String imageurl = imageUrls.get(position); 
     LayoutInflater inflate = LayoutInflater.from(context); 
     View v = inflate.inflate(rowResId, parent, false); 
     final ImageView image = (ImageView) v.findViewById(R.id.image); 
     final ProgressBar progress = (ProgressBar) v 
       .findViewById(R.id.progress); 

     image.setVisibility(View.GONE); 
     progress.setVisibility(View.VISIBLE); 
     final Handler handler = new Handler() { 
      @Override 
      public void handleMessage(Message message) { 
       System.out.println("Set image at" + position 
         + " Image Name :: " + imageurl); 
       progress.setVisibility(View.GONE); 
       image.setImageBitmap((Bitmap) message.obj); 
       image.setVisibility(View.VISIBLE); 
      } 
     }; 

     Thread thread = new Thread() { 
      @Override 
      public void run() { 
       Bitmap drawable = LoadImageFromWebOperations(imageurl); 
       Message message = handler.obtainMessage(1, drawable); 
       handler.sendMessage(message); 

      } 
     }; 
     thread.start(); 
     return v; 
    } 

回答

2

可以使用位图图像列表。首先将列表中的所有位图设置为空。并在getView方法中检查位图列表位置中的位图是否为空。如果为null,则显示progressBar并下载图像并将图像保存在列表中。

例如图像列表名称是图像。然后getView方法中的代码如下:

public View getView(final int position, View convertView, ViewGroup parent) { 
    final String imageurl = imageUrls.get(position); 
    LayoutInflater inflate = LayoutInflater.from(context); 
    View v = inflate.inflate(rowResId, parent, false); 
    final ImageView image = (ImageView) v.findViewById(R.id.image); 
    final ProgressBar progress = (ProgressBar) v 
      .findViewById(R.id.progress); 
    if(images.get(position) != null) { 
     progress.setVisibility(View.GONE); 
     image.setImageBitmap(images.get(position)); 
     image.setVisibility(View.VISIBLE); 
    } else { 
     image.setVisibility(View.GONE); 
     progress.setVisibility(View.VISIBLE); 
     final Handler handler = new Handler() { 
      @Override 
      public void handleMessage(Message message) { 
        System.out.println("Set image at" + position 
        + " Image Name :: " + imageurl); 
        progress.setVisibility(View.GONE); 
        image.setImageBitmap((Bitmap) message.obj); 
        image.setVisibility(View.VISIBLE); 
      } 
     }; 

     Thread thread = new Thread() { 
     @Override 
      public void run() { 
       Bitmap drawable = LoadImageFromWebOperations(imageurl); 
       images.add(position, drawable); 
       Message message = handler.obtainMessage(1, drawable); 
       handler.sendMessage(message); 
      } 
     }; 
     thread.start(); 
    } 

    return v; 
} 

希望,你已经明白我的意思了。 :)

+0

是的,我同意gypsicoder。为列表维护一个位图或可绘制缓冲区。每次在getView方法中检查Drawable是否可用。如果没有,然后下载,否则直接从缓冲区中填充。这是明智的。 – Javanator 2011-02-15 06:46:02

1

只需要使用下面的方法你Activity

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
super.onConfigurationChanged(newConfig); 
} 
0

在您的活动的活动标记中的Android清单文件中添加此属性。那么不需要任何代码。

机器人:configChanges = “方向| keyboardHidden”

这是回答你的问题,但什么是最好的你的问题是什么@gypsicoder建议

希望这有助于:)

不要忘记接受最能帮助你的答案。这样其他人也可以得到正确的参考。