2012-07-27 100 views
1

我想使用AsyncTask将图像加载到我的FlipView中,但我不知道如何继续。 我需要使用AsyncTask,因为应用程序强制关闭,因为我有20个图像要从drawables加载。在AsyncTask中填充ViewFlipper

private class asyncImage extends AsyncTask<Void, Void, Void>{ 
     int i; 
     @Override 
     protected Void doInBackground(Void... params) { 
      for (i=0;i<imageID.length;i++){ 
       image = new ImageView(getBaseContext()); 
       image.setId(i); 
       image.setImageResource(imageID[i]); 
       image.setBackgroundDrawable(getResources().getDrawable(R.drawable.border)); 
       image.setScaleType(ImageView.ScaleType.FIT_XY); 
       FlipV.addView(image); 
      } 
      return null; 
     } 

    protected void onPostExecute(Void result){ 

     image.setBackgroundDrawable(getResources().getDrawable(R.drawable.border)); 
     image.setScaleType(ImageView.ScaleType.FIT_XY); 
     for(int x=0;x<imageID.length;x++){ 
      FlipV.addView(???); //How to add images into FlipView? 
     } 
    } 

} 

我卡在将图像添加到FlipView。任何帮助?

+1

如果您从资源中加载图片,则不需要使用asyntstask – silentnuke 2012-07-27 11:32:45

+0

,但如果我的图片超过10张,应用程序崩溃。一种记忆问题。 – 2012-07-27 11:58:13

+0

什么在logcat?或者你得到ANR错误? – silentnuke 2012-07-30 19:25:12

回答

1

正如我从我的评论中提到的,我已经通过使用imageview数组来解决问题,而不是在doInBackground中加载图像,并在postExecute的viewflipper中添加图像浏览。我还添加了一个进度对话框来显示加载时间,而不是在我的应用程序中显示空白屏幕。感谢所有回复的人。

private class asyncImage extends AsyncTask<Void, Void, Void>{ 
     int i; 
     @Override 
     protected Void doInBackground(Void... params) { 
      for (i=0;i<imageID.length;i++){ 
       image[i] = new ImageView(getBaseContext()); 
       image[i].setImageResource(imageID[i]); 
       image[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.border)); 
       image[i].setScaleType(ImageView.ScaleType.FIT_XY); 
      } 
      return null; 
     } 

     protected void onPostExecute(Void result){ 
      for (int x=0;x<imageID.length;x++){ 
      FlipV.addView(image[x]); 
      } 
      count = 1; 
      progDialog.dismiss(); 
      txItem.setText(Integer.toString(count) + "/" + (imageID.length)); 
     } 
    } 
0

你不能添加指令来影响事件/ UI线程的doInBackground方法。相反,您应该使用publishProgress()方法通知事件线程,并在onProgressUpdate()添加视图到flipview。

+0

你能为我提供一个样品吗?因为我在使用循环填充ViewFlipper的同时使用asynctask时感到困惑。 – 2012-07-27 11:59:28