我正在开发一个从服务器获取数据的应用程序,我有一个列表包含标题视图的视图我正在下载图像并在完成后我想更新我的标题视图,我该如何实现?
我也在更新我的项目并且他们正在成功更新但我不知道如何在适配器中获取我的标题View并更新它...
答案 0 :(得分:1)
保持对列表视图标题中使用的文本视图的引用。
我假设您添加列表视图标题,如下所示:
View header = getLayoutInflater().inflate(R.layout.list_header, null);
TextView headerText = (TextView) header.findViewById(R.id.my_textview);
headerText.setText("This is my header!");
myListView.addHeaderView(header);
图像下载完成后,您可以使用某些界面/侦听器进行通知,然后更新文本视图。
答案 1 :(得分:1)
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
ListView listView = (ListView) findViewById(R.id.list);
View header = getLayoutInflater().inflate(R.layout.header, null);
listView.addHeaderView(header);
}
}
我希望这可以帮助你:)
答案 2 :(得分:1)
我刚刚得到了一个解决方案,我在这里发帖,所以它对每个人都很有用
我只是简单地在列表适配器的构造函数中发送headerView的引用并在那里下载图像并将图像设置为其零索引项目即标题视图
public class MainListViewAdapter extends ArrayAdapter<DataObjects>{
private int layoutResourceID;
private ArrayList<DataObjects> dataObjects;
private Context context;
private ListHolder listHolder;
private View headerView;
private Bitmap bitmap;
private Boolean flagBitmap = false;
public MainListViewAdapter(Context context, int layoutResourceID, ArrayList<DataObjects> objects, View headerView) {
super(context, layoutResourceID, objects);
this.layoutResourceID = layoutResourceID;
this.dataObjects = objects;
this.context = context;
this.headerView = headerView;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
new DownloadImageTask(this.dataObjects.get(0).getImageURL()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[])null);
else
new DownloadImageTask(this.dataObjects.get(0).getImageURL()).execute();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
listHolder = new ListHolder();
if(row == null) {
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceID, parent, false);
row.setTag(listHolder);
} else {
listHolder = (ListHolder) row.getTag();
}
DataObjects list = dataObjects.get(position);
if(position == 0) {
ImageView imageViewHeader = (ImageView) headerView.findViewById(R.id.imageViewHeaderImage);
if(flagBitmap)
imageViewHeader.setImageBitmap(bitmap);
else
imageViewHeader.setImageResource(R.drawable.sample);
}
return row;
}
private class ListHolder {
TextView textViewDate;
ImageView imageViewMagazine;
Button buttonPreview, buttonDownload;
}
private class DownloadImageTask extends AsyncTask<Void, Void, Bitmap> {
private String URL;
public DownloadImageTask(String URL) {
this.URL = URL;
}
protected Bitmap doInBackground(Void... urls) {
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(URL).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
if(result != null) {
setThumbBitmap(result);
setThumbAvailable(true);
}
}
public void setThumbBitmap(Bitmap thumbBitmap) {
bitmap = thumbBitmap;
}
public void setThumbAvailable(boolean thumbAvailable) {
flagBitmap = thumbAvailable;
}
}
}