首页 > 解决方案 > 是否可以将包含一些子项的布局添加到 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++;
        }
    }

}

标签: androidandroid-layoutlistviewandroid-asynctask

解决方案


推荐阅读