Android 图像下载完成时更新listView的标题视图

Android 图像下载完成时更新listView的标题视图,android,android-listview,Android,Android Listview,我正在开发一个从服务器获取数据的应用程序,我有一个包含标题视图的列表视图,我正在下载一个图像,完成后我想更新标题视图,我如何实现这一点 我也在更新我的项目,它们正在成功更新,但我不知道如何在适配器中获取标题视图并进行更新…保留对列表视图标题中使用的文本视图的引用 我假设您添加列表视图标题,如下所示: View header = getLayoutInflater().inflate(R.layout.list_header, null); TextView headerText = (T

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


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

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

我假设您添加列表视图标题,如下所示:

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);
   }
}
我假设您添加列表视图标题,如下所示:

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);
   }
}
受保护的长doInBackground(URL…URL){ int count=url.length; 长totalSize=0; for(int i=0;i
我希望这可以帮助您:)

私有类下载文件任务扩展异步任务{
受保护的长doInBackground(URL…URL){
int count=url.length;
长totalSize=0;
for(int i=0;i

我希望这能对你有所帮助:)

我刚刚得到一个解决方案,我在这里发布它,以便对每个人都有用

我只需在列表适配器的构造函数中发送headerView的引用,然后在那里下载图像,并将图像设置为其零索引项,即header视图

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;
        }
    }
}
公共类MainListViewAdapter扩展了ArrayAdapter{
私人内部布局资源;
私有ArrayList数据对象;
私人语境;
私人名册持有人;
私有视图headerView;
私有位图;
私有布尔flagBitmap=false;
公共MainListViewAdapter(上下文上下文、int layoutResourceID、ArrayList对象、视图头视图){
超级(上下文、布局资源ID、对象);
this.layoutResourceID=layoutResourceID;
this.dataObjects=对象;
this.context=上下文;
this.headerView=headerView;
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.HONEYCOMB)
新下载的ImageTask(this.dataObjects.get(0.getImageURL()).executeOnExecutor(AsyncTask.THREAD\u POOL\u EXECUTOR,(Void[])null);
其他的
新下载的ImageTask(this.dataObjects.get(0.getImageURL()).execute();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
listHolder=新的listHolder();
if(行==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceID,父级,false);
row.setTag(列表持有者);
}否则{
listHolder=(listHolder)row.getTag();
}
DataObjects list=DataObjects.get(位置);
如果(位置==0){
ImageView imageViewHeader=(ImageView)headerView.findViewById(R.id.imageViewHeaderImage);
如果(标记位图)
设置图像位图(位图);
其他的
imageViewHeader.setImageResource(R.drawable.sample);
}
返回行;
}
私有类列表持有者{
text查看text查看日期;
ImageView杂志;
按钮查看,按钮下载;
}
私有类DownloadImageTask扩展了AsyncTask{
私有字符串URL;
公共下载ImageTask(字符串URL){
this.URL=URL;
}
受保护位图doInBackground(无效…URL){
位图mIcon11=null;
试一试{
InputStream in=new java.net.URL(URL.openStream();
mIcon11=BitmapFactory.decodeStream(in);
}捕获(例外e){
e、 printStackTrace();
}
返回mIcon11;
}
受保护的void onPostExecute(位图结果){
如果(结果!=null){
setThumbBitmap(结果);
setThumbAvailable(真);
}
}
公共无效setThumbBitmap(位图thumbBitmap){
位图=拇指位图;
}
public void setThumbAvailable(布尔thumbAvailable){
flagBitmap=可用的拇指;
}
}
}

我刚刚得到了一个解决方案,我在这里发布它,以便对每个人都有用

我只需在列表适配器的构造函数中发送headerView的引用,然后在那里下载图像,并将图像设置为其零索引项,即header视图

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;
        }
    }
}
公共类MainListViewAdapter扩展了ArrayAdapter{
私人内部布局资源;
脉波重复间隔