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{
私人内部布局资源;
脉波重复间隔