yah*_*hya 5 android listview progress-bar
我有一个listView,在每个项目上我添加了一个progressBar,它需要在下载图像后消失.但我找不到办法做到这一点.我试图让它在getView类上消失,但它在下载图像后不会立即消失.
例如,在AsyncTask类'DoInBackground上向scrollView添加一些视图时我可以下载图像然后onPostExecute我可以设置图像,然后删除progressBar.这很好用.我想为listView做这样的事情.谁能帮助我?
我不知道我是否清楚,但我可以总结一下,我有list_item.xml包含imageview和progressbar.我希望在下载和设置图像后使这些进度条消失.
谢谢你的帮助.
这是我的适配器类:
class myListAdapter extends ArrayAdapter<Items> {
private ArrayList<Items> items;
private Context ctx;
public myListAdapter(Context context, int textViewResourceId,
ArrayList<Items> items) {
super(context, textViewResourceId, items);
this.ctx = context;
this.items = items;
}
@Override
public int getCount() {
return items.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater inf = (LayoutInflater) ctx
.getSystemService(LAYOUT_INFLATER_SERVICE);
v = inf.inflate(R.layout.main_list_item, null);
}
Items index = listContents.get(position);
if (index != null) {
ImageView img = (ImageView) v.findViewById(R.id.listImage);
TextView title = (TextView) v.findViewById(R.id.listTopText);
TextView content = (TextView) v.findViewById(R.id.listDownText);
if (title != null)
title.setText(index.getTitle());
if (content != null)
content.setText(index.getContent());
if (img != null)
img.setImageBitmap(index.getImageBitmap());
((ProgressBar) v.findViewById(R.id.listItemProgressBar)).setVisibility(View.GONE);
}
return v;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,在下面的这一行,我让进度条消失了但是它应该在图像下载和设置后消失了......但是在添加的列表项上没有进度条,那是我的问题?
((ProgressBar) v.findViewById(R.id.listItemProgressBar)).setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)
您可以这样做,但这不是最佳做法。你应该自己检查线程同步。并使用 LruCache 或 WeakRefrences 缓存位图。该演示仅显示逻辑。
final class MyAdapter extends BaseAdapter {
private final HashMap<String, Bitmap> mImageMap;
private final HashSet<String> mDownloadingSet;
public MyAdapter() {
mImageMap = new HashMap<String, Bitmap>();
mDownloadingSet = new HashSet<String>();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return NUMBER_YOU_WANT;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public void setImage(String url, Bitmap bitmap) {
mDownloadingSet.remove(url);
if (bitmap != null) {
mImageMap.put(url, bitmap);
notifyDataSetChanged();
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.grid_view,
parent, false);
holder = new ViewHolder();
/***
* find the views.
*/
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final String url = "";// Get the image url here.
if (mImageMap.containsKey(url)) {
holder.image.setImageBitmap(mImageMap.get(url));
holder.progressBar.setVisibility(View.GONE);
} else {
holder.image.setImageResource(R.drawable.img_downloading);
holder.progressBar.setVisibility(View.VISIBLE);
if (!mDownloadingSet.contains(url)) {
ImageDownloader task = new ImageDownloader();
mDownloadingSet.add(url);
task.execute(url);
}
}
return convertView;
}
}
static class ViewHolder {
ImageView image;
ProgressBar progressBar;
}
final class ImageDownloader extends AsyncTask<String, Void, Bitmap> {
String url;
@Override
protected Bitmap doInBackground(String... params) {
url = params[0];
final Bitmap bitmap = fetchUrlAndDecode(params[0]);
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
mAdapter.setImage(url, result);
}
private Bitmap fetchUrlAndDecode(String url) {
Bitmap bitmap = null;
/**
* Fetch your bitmap and decode it.
*/
return bitmap;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9433 次 |
| 最近记录: |