2012-01-28 86 views
3

我的代碼如下:進度對話框中的GridView

public class wall extends Activity { 
GridView webgridview; 
Button web; 

ProgressDialog pd; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.wall); 

pd = ProgressDialog.show(wall.this,"Loading", "Please Wait...",true); 
       new Thread() { 
        public void run() { 
        try { 
webgridview.setAdapter(new WebImageAdapter(wall.this)); 
}catch(Exception e) 
{ 
} 
handler.sendEmptyMessage(0); 
pd.dismiss(); 
} 
}.start(); 
private Handler handler = new Handler() { 
    public void handleMessage(Message msg) { 
     Toast.makeText(wall.this, "finished", 1).show(); 
    } 
}; 

而且我的適配器類,如下所示。我只在上面的類中編碼進度對話框。

public class WebImageAdapter extends BaseAdapter { 
private Context mContext; 
public static String[] myRemoteImages = { 
    "http://www.evergreenhits.com/ad/wallpapers/3d_1.jpg", 
    "http://www.evergreenhits.com/ad/wallpapers/3d_2.jpg", 
    "http://www.evergreenhits.com/ad/wallpapers/3d_3.jpg", 
    "http://www.evergreenhits.com/ad/wallpapers/3d_4.jpg", 
    "http://www.evergreenhits.com/ad/wallpapers/3d_5.jpg" 
     }; 

public WebImageAdapter(Context c) { 
    mContext = c; 
} 

public int getCount() { 
    //return animals.length; 
    return this.myRemoteImages.length; 

} 

public Object getItem(int position) { 
    return position; 
} 

public long getItemId(int position) { 
    return position; 
} 

// create a new ImageView for each item referenced by the Adapter 
public ImageView getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    imageView = new ImageView(mContext); 
    if (convertView == null) { 

     imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 

     imageView.setPadding(8, 8, 8, 8); 
    } else { 
     imageView = (ImageView) convertView; 
    } 

try { 
URL aURL = new URL(myRemoteImages[position]); 
URLConnection conn = aURL.openConnection(); 
conn.connect(); 
InputStream is = conn.getInputStream(); 
BufferedInputStream bis = new BufferedInputStream(is); 
Drawable d=Drawable.createFromStream(bis, "src Name"); 

bis.close(); 
is.close(); 
imageView.setImageDrawable(d); 
} catch (IOException e) { 
Log.e("DEBUGTAG", "Remote Image Exception", e); 
} 

imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); 
imageView.setLayoutParams(new GridView.LayoutParams(150, 150)); 
    return imageView; 
} 

進度對話框無法正常工作。它顯示並突然之前在gridview中加載的圖像。請儘快幫助我。

+0

您使用的是最髒的方式,我可以說將網絡部分納入其中e適配器類。 – 2012-01-28 08:34:20

回答

2

使用的AsyncTask:

電話:

dialog=ProgressDialog.show(wall.this,"Loading", "Please Wait...",true); 
     doback dob=new doback(); 
     dob.execute(); 

class doback extends AsyncTask<URL, Integer, Long> 
    { 

     @Override 
     protected Long doInBackground(URL... arg0) 
     { 
      try 
      { 
         //getImagepaths from Server 
      } 
      catch(Exception e) 
      { 

      } 
      return null; 
     } 
     protected void onProgressUpdate(Integer... progress) 
     { 

     } 
     protected void onPostExecute(Long result) 
     { 
      try 
      { 
       webgridview.setAdapter(new WebImageAdapter(wall.this)); 

       dialog.dismiss(); 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
       dialog.dismiss(); 
      } 
     } 
    } 

適配器代碼是一些這樣的:

class WebImageAdapter extends BaseAdapter{ 

//  @Override 
     public int getCount() { 

     return names.length; 
     } 

//  @Override 
     public Object getItem(int position) { 

     return null; 
     } 

//  @Override 
     public long getItemId(int position) { 

     return 0; 
     } 

//  @Override 
     public View getView(int pos, View convertView, ViewGroup parent) { 
     View row=getLayoutInflater().inflate(R.layout.nameitem,null); 
     ImageView image=(ImageView)row.findViewById(R.id.image); 

     image.setImageBitmap(convertImage(myRemoteImages[position]))// convertImage is to convert url to bitmap 
     return row; 
     } 

     } 
+0

不錯的回答阿比爲它+1 – Lucifer 2012-01-28 08:04:36

+0

路西法謝謝你隊友,:) – Abhi 2012-01-28 09:12:38

+0

你歡迎隊友。保持分享知識。 :) – Lucifer 2012-01-28 09:15:23

-2

setAdapter(),不要花費更多的時間,它的getView()的Adapter類每次打網絡並花費時間。所以在setAdapter上使用progressDialog是不合適的。在網格的滾動中,使用代碼花費了大量時間,因爲getView()會在滾動視圖上自動調用。

您應該從LazyList獲取從web加載圖像並將它們放置在ImageView中的參考。