android - 是否可以将包含一些子项的布局添加到 listView
问题描述
我有一个异步任务,它将一定数量的图像 url 作为输入,下载图像将它们放入 imageViews 并返回包含 imageView 和进度条的相对布局(在下载图像时显示)。所以我想做的就是把这个包含imageView和progressBar的相对布局作为一行放到listView中。这可能吗?
ImageDownloader 类:
class ImageDownloader extends AsyncTask<String, Void, Bitmap> {
private ImageView imageView;
private ProgressBar progressBar;
public ImageDownloader(ImageView imageView, ProgressBar progressBar/*, ImageDownloader imageDownloader*/) {
this.imageView = imageView;
this.progressBar = progressBar;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
imageView.setVisibility(View.GONE);
progressBar.setVisibility(View.VISIBLE);
}
@Override
protected Bitmap doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
System.out.println("Content Type = " + connection.getContentType());
if (connection.getContentType().contains("image")) {
InputStream inputStream = connection.getInputStream();
return BitmapFactory.decodeStream(inputStream);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
try {
System.out.println("Bitmaaap = "+bitmap);
imageView.setImageBitmap(bitmap);
progressBar.setVisibility(View.GONE);
imageView.setVisibility(View.VISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
}
}
ImageUI 类:
class ImageUI {
private Context context;
private ArrayList<String> urls = new ArrayList<>();
private ImageView imageView;
private ProgressBar progressBar;
private LinearLayout linearLayoutScrollView;
public ImageUI(Context context, ArrayList<String> urls, LinearLayout linearLayoutScrollView) {
this.context = context;
this.urls = urls;
this.linearLayoutScrollView = linearLayoutScrollView;
}
private void buildUI() {
System.out.println("Error # 1");
imageView = new ImageView(context);
imageView.setVisibility(View.GONE);
System.out.println("Error # 2");
progressBar = new ProgressBar(context);
progressBar.setIndeterminate(true);
progressBar.setVisibility(View.GONE);
System.out.println("Error # 3");
RelativeLayout relativeLayout = new RelativeLayout(context);
relativeLayout.setGravity(1);
relativeLayout.addView(imageView);
relativeLayout.addView(progressBar);
//
// System.out.println("Error # 4");
// linearLayoutScrollView = (LinearLayout) linearLayoutScrollView.findViewById(R.id.linearLayoutScrollView);
linearLayoutScrollView.addView(relativeLayout);
// System.out.println("Error # 5");
}
void downloadImages() {
int i = 0;
while (i < urls.size()) {
buildUI();
ImageDownloader imageDownloader = new ImageDownloader(imageView, progressBar/*,imageDownloader*/);
progressBar.setVisibility(View.VISIBLE);
imageDownloader.execute(urls.get(i));
imageDownloader = null;
i++;
}
}
}
解决方案
推荐阅读
- c# - 动作字典 - 包括动作参数
- python - 如何绘制描述 ML 模型性能的图表?
- elasticsearch - 每次在 elasticsearch 中更新文档时自动增加字段值
- php - 给定开始日期获取当前月份之前的所有月份名称?
- c++ - 创建一个函数来查找 Max & Min
- laravel - 如何使用 SimplePie laravel 包显示 rss 提要?
- filter - 从 Ansible 中的字符串中删除最后 n 个字符
- python - 在 Dash-plotly 按钮上运行 python 脚本
- node.js - 如何在node.js中配置不同服务器的dburl?
- windows - Jboss 7.2 - [org.jboss.config] file.encoding - Jboss 作为 Windows 服务