类似于安卓市场或机锋这样的  有个安装的按钮  然后有个进度条  当触发这个按钮后就会有进度条更新 这个我不知道如何去做了  请教一下大家  看代码继承的BaseAdapter不多说public class GamesInfoListAdapter extends BaseAdapter{
.....
....
....
...
}
重点在getView
    @Override
    public View getView(final int index, View convertView, ViewGroup parent) {
        Log.d("ccf", "getView"+index);
        final GridHolder holder;
        if (convertView == null) {   
            convertView = mInflater.inflate(R.layout.gridview_item, null);   
            holder = new GridHolder();
            holder.appImage = (ImageView)convertView.findViewById(R.id.itemImage_logo);
            holder.appName = (TextView)convertView.findViewById(R.id.itemText_name);
            holder.appNet = (TextView)convertView.findViewById(R.id.itemText_type_name);
            holder.btns = (ImageButton)convertView.findViewById(R.id.btns);
            holder.size = (TextView)convertView.findViewById(R.id.tv_game_size);
            holder.pro = (ProgressBar) convertView.findViewById(R.id.progressBar1);
            holder.textView = (TextView) convertView.findViewById(R.id.tv_size);
            holder.ratingBarScore = (RatingBar)convertView.findViewById(R.id.ratingBar_score);
            
            convertView.setTag(holder);           }else{
             holder = (GridHolder) convertView.getTag();           }
        GameInfo info = null;
        info = list.get(index);
        if (info != null) {   
            if(info.getLogo_url() != null){
                //如果取得到图片就用取到的网络图片,不然就用默认
                Log.d("ccf", info.getLogo_url().substring(21));
                holder.appImage.setImageBitmap(info.getDownloadBitmap());
            }
            
            holder.appName.setText(info.getName());
            holder.appNet.setText(info.getTypeName());
            holder.size.setText(info.getSize());
            holder.ratingBarScore.setRating(Float.parseFloat(info.getSourceScore()));//评分 暂时注销掉
            holder.btns.setTag(info.getDownLoadFileUrl());
            final String gameName;
            gameName = info.getName();
            holder.btns .setOnClickListener(new OnClickListener(){
                @Override
                public void onClick(View v) {   //触发下载操作
                    
                    if (flag == 0){//判断点击标记
                    
                    holder.ratingBarScore.setVisibility(View.GONE);
                    holder.pro.setVisibility(View.VISIBLE);
                    holder.textView.setVisibility(View.VISIBLE);
                    if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
                    }else {
//                        Toast.makeText(this, "没有SD卡", 1000).show();
                        Log.v("wjp", "7889900");
                    }
                    final String downloadUrl =(String)v.getTag();
                    Thread thread = new Thread(){
                        int count = 0;
                        public void run(){
                          Log.v("ccf", "onClick");
                          try {
                              WebHelper.downLoadFile(context, downloadUrl, gameName);
                              WebHelper.openFile(context, new File("/sdcard/9twan/"+ gameName +".apk"));
                              if(!WebHelper.REGISTER_FLAG){
                                  Log.v("GamesInfoListAdapter", "WebHelper.REGISTER_FLAG == false");
                                  String imei, mac, mobile_number, model, brand;
                                  boolean flag;
                                  TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
                                  imei = tm.getDeviceId();
                                  if(imei == null){
                                      imei = "CUSTOM" + WebHelper.generateRandomIMEIString(15);
                                  }
                                  mac = null;
//                                  mac = tm.getDeviceId(); //这个自己写个取WIFI的方法
                                  if(mac == null){
                                      mac = "CUSTOM" + WebHelper.generateRandomMacString(17);
                                  }
                                  mobile_number = tm.getLine1Number();
                                  model = tm.getLine1Number();
                                  brand = tm.getLine1Number();
                                  flag = WebHelper.regDevice(context, "install", imei, mac, mobile_number, model, brand);
                                  if(flag){
                                      WebHelper.REGISTER_FLAG = true;
                                      Log.v("GamesInfoListAdapter", "WebHelper.REGISTER_FLAG == true");
                                  }
                              }
                              
                          }catch (Exception e){
                              e.printStackTrace();
                          }
                        }
                    };
                    Log.v("wjp", "正在运行"+thread.getName());
                    thread.start();
                    Toast.makeText(context, "开始下载" + gameName, 0).show();
                    holder.btns.setBackgroundResource(R.drawable.tab_out);
                    
                    flag =1;
                    }else {
//                        Thread.interrupted();//暂停 返回boolean
//                        Thread.sleep(3000);
                       
                        holder.btns.setBackgroundResource(R.drawable.tab_install);
                        flag =0;
                        
                    }
                }
            });
        }
        return convertView;
    }
//保存的下载的文件 APK
    protected File downLoadFile(String httpUrl) {
        // TODO Auto-generated method stub
        final String fileName = "updata.apk";
        File tmpFile = new File("//sdcard//update");
        if (!tmpFile.exists()) {
                tmpFile.mkdir();
        }
        final File file = new File("//sdcard//update//" + fileName);        try {
                URL url = new URL(httpUrl);
                try {
                        HttpURLConnection conn = (HttpURLConnection) url
                                        .openConnection();
                        InputStream is = conn.getInputStream();
//                        FileLength = conn.getContentLength();//根据响应得到大小
//                        Log.v("wjp","FileLength"+FileLength );
//                        if(FileLength <=0)throw new RuntimeException("无法获取文件的大小");//获取文件大小
//                        Log.v("wjp","FileLengsss"+FileLength );
                        if(is == null)throw new RuntimeException("stream is null");//null
                        FileOutputStream fos = new FileOutputStream(file);
                        byte[] buf = new byte[1024];//                        
                        conn.connect();
                        double count = 0;
                        if (conn.getResponseCode() >= 400) {
                                Toast.makeText(context, "出错", Toast.LENGTH_SHORT)
                                                .show();
                        } else {
                                while (count <= 100) {
                                        if (is != null) {
                                                int numRead = is.read(buf);
                                                if (numRead <=0) {
                                                        break;
                                                } else {
                                                        fos.write(buf, 0, numRead);
//                                                        count +=numRead;
                                                        
//                                                        sendMsg(1);
                                                }                                        } else {
                                                break;
                                        }                                }
                        }                        conn.disconnect();
                        fos.close();
                        is.close();
                } catch (IOException e) {
                        // TODO Auto-generated catch block                        e.printStackTrace();
                }
        } catch (MalformedURLException e) {
                // TODO Auto-generated catch block                e.printStackTrace();
        }        return file;
}不知道怎么去更新 让进度条去显示

解决方案 »

  1.   

    错了  我的这个
     
     WebHelper.downLoadFile(context, downloadUrl, gameName);
     WebHelper.openFile(context, new File("/sdcard/9twan/"+ gameName +".apk"));
    写在了另一个类  在WebHelper类  这个类是连接服务器 解析等操作的 郁闷  这样我该怎么更新进度条?
      

  2.   

         利用接口回调,具体可以参考网上那种异步加载图片的例子,异步加载图片是将图片加载放在另外的线程中,加载完成后通过回调接口通知ui线程,更新界面,而你现在可以利用这个原理,利用回调接口通知ui线程更新下载进度。原理就是这样,例子的话,百度一下异步加载图片吧,一大把