2012-01-28 2 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; 
} 

진행률 대화 상자가 제대로 작동하지 않습니다. 그리드 뷰에로드 된 이미지 앞에 표시되고 갑자기 사라집니다. 제발 빨리 도와주세요.

+0

내가 말할 수있는 th에 네트워크 부분을 포함시킨다. e 어댑터 클래스. –

답변

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

좋은 대답 Abhi +1 그것에 대해 – Lucifer

+0

루시퍼는 당신에게 친구 감사합니다, :) – Abhi

+0

당신은 친구를 환영합니다. 지식 공유. :) – Lucifer

-2

setAdapter(), 더 많은 시간을 들이지 않아도됩니다. 웹을 방문 할 때마다 시간이 걸릴 때마다 Adapter 클래스의 getView()를 호출하십시오. 따라서 setAdapter에서 progressDialog를 사용하는 것은 적절하지 않습니다. 그리드를 스크롤 할 때 코드를 사용하면 스크롤 뷰에서 getView()가 자동으로 호출되므로 시간이 많이 걸립니다.

웹에서 이미지를로드하고 ImageView에 배치하려면 LazyList의 참조가 있어야합니다.