图像下载完成时更新listView的页眉视图



我正在开发一个从服务器获取数据的应用程序,我有一个包含头视图的列表视图,我正在下载一个图像,完成后我想更新我的头视图,我该如何实现?

我也在更新我的项目,它们正在成功更新,但我不知道如何在适配器中获取我的头视图并更新它。。。

保留对列表视图标头中使用的文本视图的引用。

我假设你添加列表视图标题如下:

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);

一旦图像下载完成,您就可以使用一些接口/侦听器进行通知,然后更新文本视图。

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);
   }
}

我希望这可以帮助你:)

我刚刚得到了一个解决方案,我在这里发帖,所以它对每个都很有用

我只是简单地在列表适配器的构造函数中发送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;
        }
    }
}

最新更新