hello_12413 2015-09-29 02:42
浏览 1493

使用xutils无法更新ProgressBar

用Xutils下载,但是下载列表进度却不动,只是刷新progress有进度,但是刷新其他textView,就都不能刷新了。
如图:图片说明
全部刷新不了:图片说明

附上代码:
package com.work.driver.adapter;

import java.io.File;
import java.lang.ref.WeakReference;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.DownloadListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.library.app.bitmap.BitmapTools;
import com.library.app.download.DownloadInfo;
import com.library.app.download.DownloadManager;
import com.library.app.instrument.Common;
import com.library.app.storage.SDCardTools;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.exception.DbException;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.HttpHandler;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.util.LogUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
import com.work.driver.R;
import com.work.driver.activity.BaseActivity;

/**

  • @project a_driver
  • @ClassName AppListAdapter.java
  • @Description App列表Adapter
  • @date 2015-6-23 下午6:28:37
    */
    public class DownloadManageAdapter extends BaseAdapter {

    private final Context mContext;
    private final LayoutInflater mInflater;
    private DownloadManager downloadManager;
    private BitmapTools bitmapTools;

    public DownloadManageAdapter(Context context, DownloadManager downloadManager) {
    mContext = context;
    mInflater = LayoutInflater.from(mContext);
    this.downloadManager = downloadManager;
    bitmapTools = ((BaseActivity) context).mBitmapTools;
    }

    @Override
    public int getCount() {
    if (downloadManager == null)
    return 0;
    return downloadManager.getDownloadInfoListCount();
    }

    @Override
    public Object getItem(int i) {
    return downloadManager.getDownloadInfo(i);
    }

    @Override
    public long getItemId(int i) {
    return i;
    }

    @SuppressWarnings("unchecked")
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
    DownloadItemViewHolder holder = null;
    DownloadInfo downloadInfo = downloadManager.getDownloadInfo(i);
    if (view == null) {
    view = mInflater.inflate(R.layout.new_frg_manage_item, null);
    holder = new DownloadItemViewHolder(downloadInfo);
    ViewUtils.inject(holder, view);
    view.setTag(holder);
    holder.refresh();
    } else {
    holder = (DownloadItemViewHolder) view.getTag();
    holder.update(downloadInfo);
    }
    HttpHandler handler = downloadInfo.getHandler();
    if (handler != null) {
    RequestCallBack callBack = handler.getRequestCallBack();
    if (callBack instanceof DownloadManager.ManagerCallBack) {
    DownloadManager.ManagerCallBack managerCallBack = (DownloadManager.ManagerCallBack) callBack;
    managerCallBack.setBaseCallBack(new DownloadRequestCallBack());
    }
    callBack.setUserTag(new WeakReference(holder));
    }

    return view;
    

    }

    public class DownloadItemViewHolder {
    @ViewInject(R.id.tv_name)
    TextView name;
    @ViewInject(R.id.tv_state)
    TextView state;
    @ViewInject(R.id.tv_progress)
    TextView tv_progress;
    @ViewInject(R.id.progressBar)
    ProgressBar progressBar;
    @ViewInject(R.id.btn_down)
    Button startBtn;
    @ViewInject(R.id.img_icon)
    ImageView icon;

    private DownloadInfo downloadInfo;
    
    public DownloadItemViewHolder(DownloadInfo downloadInfo) {
        this.downloadInfo = downloadInfo;
    }
    
    public void update(DownloadInfo downloadInfo) {
        this.downloadInfo = downloadInfo;
        refresh();
    }
    
    @OnClick(R.id.btn_down)
    public void start(View v) {
        HttpHandler.State state = downloadInfo.getState();
        switch (state) {
        case WAITING:
            Toast.makeText(mContext, "排队中,请稍后~", Toast.LENGTH_SHORT).show();
            return;
        case STARTED:
        case LOADING:
            try {
                downloadManager.stopDownload(downloadInfo);
            } catch (DbException e) {
                LogUtils.e(e.getMessage(), e);
            }
            break;
        case FAILURE:
        case CANCELLED:
            try {
                downloadManager.resumeDownload(downloadInfo, new DownloadRequestCallBack());
            } catch (DbException e) {
                LogUtils.e(e.getMessage(), e);
            }
            notifyDataSetChanged();
            break;
        case SUCCESS:
            if (Common.isAppInstall(mContext, downloadInfo.getPkg())) {
                startBtn.setText(R.string.tv_open);
                Common.openApp(mContext, downloadInfo.getPkg());
            } else {
                startBtn.setText(R.string.tv_install);
                if (SDCardTools.exists(downloadInfo.getFileSavePath())) {
                    Common.installAPK(downloadInfo.getFileSavePath(), mContext);
                }
            }
            break;
        default:
            break;
        }
        notifyDataSetChanged();
    }
    
    @OnClick(R.id.btn_del)
    public void del(View v) {
        AlertDialog alertDialog = new AlertDialog.Builder(mContext).setTitle(R.string.app_name).setMessage("您确定要删除么?").setPositiveButton("确定", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                remove(downloadInfo);
            }
        }).setNegativeButton("取消", new OnClickListener() {
    
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        }).create();
        alertDialog.show();
    
    }
    
    public void remove(DownloadInfo downloadInfo) {
        try {
            downloadManager.removeDownload(downloadInfo);
            SDCardTools.delFiel(downloadInfo.getFileSavePath());
        } catch (DbException e) {
            LogUtils.e(e.getMessage(), e);
        }
        notifyDataSetChanged();
    }
    
    public void refresh() {
         bitmapTools.disPlay(icon, downloadInfo.getIcon());
         name.setText(downloadInfo.getFileName());
         if (Common.isAppInstall(mContext, downloadInfo.getPkg())) {
         startBtn.setText("打开");
         return;
         }
        if (downloadInfo.getFileLength() > 0) {
            int progress = (int) (downloadInfo.getProgress() * 100 / downloadInfo.getFileLength());
            progressBar.setProgress(progress);
             tv_progress.setText(mContext.getString(R.string.PROGRESS,
             progress) + "%");
        } else {
            progressBar.setProgress(0);
             tv_progress.setText("0%");
        }
    
        HttpHandler.State state = downloadInfo.getState();
    
        switch (state) {
        case WAITING:
            this.state.setText("等待中...");
            startBtn.setText("等待中...");
            break;
        case STARTED:
            this.state.setText("开始下载");
            startBtn.setText("暂停");
            break;
        case LOADING:
            this.state.setText("正在下载");
            startBtn.setText("暂停");
            break;
        case CANCELLED:
            this.state.setText("已暂停");
            startBtn.setText("继续");
            break;
        case SUCCESS:
            this.state.setText("成功");
            startBtn.setText("安装");
            break;
        case FAILURE:
            this.state.setText("失败");
            startBtn.setText("重试");
            break;
        default:
            break;
        }
    }
    

    }

    private class DownloadRequestCallBack extends RequestCallBack {
    private void refreshListItem() {
    if (userTag == null)
    return;
    WeakReference tag = (WeakReference) userTag;
    DownloadItemViewHolder holder = (DownloadItemViewHolder) tag.get();
    if (holder != null) {
    holder.refresh();
    }
    }

    @Override
    public void onStart() {
        refreshListItem();
    }
    
    @Override
    public void onLoading(long total, long current, boolean isUploading) {
        refreshListItem();
    }
    
    @Override
    public void onSuccess(ResponseInfo<File> responseInfo) {
        refreshListItem();
    }
    
    @Override
    public void onFailure(HttpException error, String msg) {
        refreshListItem();
    }
    
    @Override
    public void onCancelled() {
        refreshListItem();
    }
    

    }
    }

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 我这模型写的不对吗?为什么lingo解出来的下面影子价格这一溜少一个变量
    • ¥50 树莓派安卓APK系统签名
    • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
    • ¥65 汇编语言除法溢出问题
    • ¥15 Visual Studio问题
    • ¥20 求一个html代码,有偿
    • ¥100 关于使用MATLAB中copularnd函数的问题
    • ¥20 在虚拟机的pycharm上
    • ¥15 jupyterthemes 设置完毕后没有效果
    • ¥15 matlab图像高斯低通滤波