【问题标题】:How can I render an ArrayList<ImageView> got from an AsyncTask in onPreExecute()?如何渲染从 onPreExecute() 中的 AsyncTask 获得的 ArrayList<ImageView>?
【发布时间】:2013-03-07 04:30:00
【问题描述】:

我是新来的 Android 开发人员。

我正在尝试使用ViewPager 制作幻灯片。

这是我的主要活动:

public class HomeActivity extends AbstractActivity {

    ArrayList<ImageView> imagens = new ArrayList<ImageView>();
    ViewPager slideshow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        slideshow = (ViewPager) findViewById(R.id.slideshow);

        // inicia a task json
        new aTask(this).execute();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_home, menu);
        return true;
    }

    public void getResult(String result) {
        Gson gson = new Gson();
        Home home = gson.fromJson(result, Home.class);

        imagens = new ArrayList<ImageView>();

        for (Webdoor webdoor : home.webdoors) {
            try {
                ImageView img = new ImageView(getApplicationContext());
                Bitmap bitmap = BitmapFactory
                        .decodeStream((InputStream) new URL(webdoor.imagem)
                                .getContent());
                img.setImageBitmap(bitmap);

                imagens.add(img);
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private class aTask extends AsyncTask<Void, Void, ArrayList<ImageView>> {

        private HomeActivity homeActivityRef;

        public aTask(HomeActivity homeActivity) {
            this.homeActivityRef = homeActivity;
        }

        // inicio da task
        @Override
        protected void onPreExecute() {
        }

        // execução da tarefa em background
        @Override
        protected ArrayList<ImageView> doInBackground(Void... params) {
            RestTemplate restTemplate = new RestTemplate();
            restTemplate.getMessageConverters().add(
                    new StringHttpMessageConverter());
            String result = restTemplate.getForObject(
                    "http://api.modahub.com.br/home", String.class,
                    "SpringSource");

            Gson gson = new Gson();
            Home home = gson.fromJson(result, Home.class);

            ArrayList<ImageView> imagens = new ArrayList<ImageView>();

            for (Webdoor webdoor : home.webdoors) {
                try {
                    ImageView img = new ImageView(getApplicationContext());
                    Bitmap bitmap = BitmapFactory
                            .decodeStream((InputStream) new URL(webdoor.imagem)
                                    .getContent());
                    img.setImageBitmap(bitmap);

                    imagens.add(img);
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            publishProgress(); // invoca o onProgressUpdate()
            return imagens;
        }

        // callback invocado pelo publishProgress()
        @Override
        protected void onProgressUpdate(Void... values) {
        }

        // callback executado no final da task
        @Override
        protected void onPostExecute(ArrayList<ImageView> aImagens) {
            // This variable aImagens is full of images!
            // How I put this on the screen =(
        }
    }
}

如何使onPostExecute() 中的ImageViews 列表在屏幕上呈现? 我需要Fragment 还是Loader

【问题讨论】:

  • 首先,您多次初始化变量imagens...您不想这样做。其次,我没有看到你在哪里声明了你想要显示的变量aImagens
  • aImagensonPostExecute 中作为方法参数出现。
  • @R.J 错过了,抱歉

标签: android json arraylist android-asynctask android-imageview


【解决方案1】:

如果你想在 ViewPager.than 中制作 ImageGallery ImageView 中的所有图像都绑定在一个适配器中,您可以在 View pager 中绑定适配器,请参阅link

【讨论】:

  • 在此链接中,适配器使用本地资源创建视图。我的问题是我的资源在我只能在异步任务中使用的 json 中......
  • 但您可以制作 ArrayList 而不是在适配器和 setposition 中制作多个图像视图。
猜你喜欢
  • 1970-01-01
  • 2021-09-13
  • 2011-03-05
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
相关资源
最近更新 更多