类似于安卓市场或机锋这样的 有个安装的按钮 然后有个进度条 当触发这个按钮后就会有进度条更新 这个我不知道如何去做了 请教一下大家 看代码继承的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;
}不知道怎么去更新 让进度条去显示
.....
....
....
...
}
重点在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;
}不知道怎么去更新 让进度条去显示
解决方案 »
- 为什么NDK(android-ndk-r5b)编译总是找不到头文件
- 请问Android如何使用AlarmManager设置多个定时器
- andorid 与windows 应用程序 如何通信
- 哪位兄台能否告诉我android手机充电的那个孔叫什么名字?小弟我先谢谢了!
- canvas上怎么绘制带边框的path
- 调用系统浏览器的问题. 跪求大神解答~
- 如何向一个android应用程序发送通知?
- listview的getview方法为什么会调用三次啊??
- 关于Viewpager禁止按键界面切换问题
- 请问下Failed resolution of: [Ljava/beans/PropertyDescriptor该怎么解决呢?
- 实现的九宫格图片不能显示和不同的点击事件求帮忙
- 编译器上面的问题
WebHelper.downLoadFile(context, downloadUrl, gameName);
WebHelper.openFile(context, new File("/sdcard/9twan/"+ gameName +".apk"));
写在了另一个类 在WebHelper类 这个类是连接服务器 解析等操作的 郁闷 这样我该怎么更新进度条?