2014-03-06 138 views
2

我有一些「聯繫」對象,每個都有一個與它們關聯的imageURL字符串。我所見過的將圖像放入ListView的方式都是將圖像手動放入「可繪製」文件夾並調用資源。手動輸入圖像會破壞此目的。我已經提供了我的getView方法,並且註釋掉的線是我感到困惑的。Android ImageView - 從URL加載圖像

public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View row = inflater.inflate(R.layout.single_row, parent, false); 
    TextView name = (TextView) row.findViewById(R.id.topLine); 
    TextView phone = (TextView) row.findViewById(R.id.secondLine); 
    ImageView icon = (ImageView) row.findViewById(R.id.icon); 

    name.setText(contactArray.get(position).getName()); 
    phone.setText((CharSequence) contactArray.get(position).getPhone().getWorkPhone()); 
    //icon.setImage from contactArray.get(position).getImageURL(); ???? 

    return row; 
} 

回答

2

像這樣從URL加載圖像。

URL url = new URL(contactArray.get(position).getImageURL()); 
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
icon.setImageBitmap(bmp); 

也許如果你正在尋找更全面的方式,並且你有非常大的數據集。我會建議你使用Android-Universal-Image-Loader庫。

26

在使用listView時,您應該異步加載圖像,否則您的視圖將會凍結並且會出現ANR。以下是可以異步加載圖像的完整代碼示例。
在您的自定義適配器中創建此類。

class ImageDownloader extends AsyncTask<String, Void, Bitmap> { 
    ImageView bmImage; 

    public ImageDownloader(ImageView bmImage) { 
     this.bmImage = bmImage; 
    } 

    protected Bitmap doInBackground(String... urls) { 
     String url = urls[0]; 
     Bitmap mIcon = null; 
     try { 
     InputStream in = new java.net.URL(url).openStream(); 
     mIcon = BitmapFactory.decodeStream(in); 
     } catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
     } 
     return mIcon; 
    } 

    protected void onPostExecute(Bitmap result) { 
     bmImage.setImageBitmap(result); 
    } 
} 

現在,您可以非常輕鬆地加載圖像,如下所示。

new ImageDownloader(imageView).execute("Image URL will go here"); 

不要忘記添加以下權限到項目的Manifest.xml文件

<uses-permission android:name="android.permission.INTERNET" /> 
+0

這種解決方案簡單明瞭。謝謝,這正是我正在尋找的。 – tryp

+0

我是新手android設備。在哪裏把這條線放在mafnifest xml中? –