2011-02-15 91 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建議

希望這有助於:)

不要忘記接受最能幫助你的答案。這樣其他人也可以得到正確的參考。