我正在从url加载图像并将其输入到列表视图。问题是每次我滚动列表视图时imageview都会更改其图像。
我从以下位置使用了此代码:如何在Android中通过URL加载ImageView?从URL加载图像:
public class ImageLoadTask extends AsyncTask<Void, Void, Bitmap> {
private String url;
private ImageView imageView;
public ImageLoadTask(String url, ImageView imageView) {
this.url = url;
this.imageView = imageView;
}
@Override
protected Bitmap doInBackground(Void... params) {
try {
URL urlConnection = new URL(url);
HttpURLConnection connection = (HttpURLConnection) urlConnection
.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
imageView.setImageBitmap(result);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的ListAdapter中,我使用以下代码加载图像:
public View getView(int position, View convertView, ViewGroup parent){
ViewHolderItem holder = new ViewHolderItem();
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) main.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.cell, null);
holder.name = (TextView) convertView.findViewById(R.id.name);
holder.thumb = (ImageView) convertView.findViewById(R.id.thumb);
holder.duration = (TextView) convertView.findViewById(R.id.duration);
//holder.code = (TextView) convertView.findViewById(R.id.code);
convertView.setTag(holder);
}
else{
holder = (ViewHolderItem) convertView.getTag();
}
holder.name.setText(this.main.countries.get(position).title);
if (holder.thumb != null) {
new DownloadImageTask(holder.thumb).execute(this.main.countries.get(position).thumb);
}
return convertView;
}
Run Code Online (Sandbox Code Playgroud)
在我的主要活动中:
public void get_data(String data){
try {
JSONArray data_array=new JSONArray(data);
for (int i = 0 ; i < data_array.length() ; i++){
JSONObject obj=new JSONObject(data_array.get(i).toString());
Countries add=new Countries();
add.title = obj.getString("title");
add.thumb = obj.getString("artwork_url");
countries.add(add);
}
adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
尝试使用Picasso库。使用非常简单,例如。
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
Run Code Online (Sandbox Code Playgroud)
毕加索具有自动内存和磁盘缓存。在中非常重要ListView。
在哪里可以获取变量名
context?
获取上下文:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Context context = parent.getContext();
[...]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3120 次 |
| 最近记录: |