如何在ProgressDialog中更新progressBar?

时间:2015-07-02 12:20:12

标签: android android-progressbar

我需要在自定义布局中更新自定义 progressBar,该布局作为查看添加到 ProgressDialog

自定义布局:

cordova platform version android

爪哇:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:background="@android:color/transparent" >

    <com.android.library.circleprogress.ArcProgress
        android:id="@+id/arc_progress"
        android:background="@android:color/transparent"
        android:layout_width="200dp"
        android:layout_height="200dp"
        custom:arc_progress="5"
        custom:arc_stroke_width="10dp"
        android:layout_centerInParent="true"
        custom:arc_bottom_text="Updating..."/>

</RelativeLayout>

我在 AsyncTask doInBackground 方法中调用此创建对话框,因此我需要更新百分比数字以使条形移动。

public static ProgressDialog createProgressDialog(Context mContext, ViewGroup viewGroup) {
    ProgressDialog dialog = new ProgressDialog(mContext);
    try {
        dialog.show();
    } catch (BadTokenException e) {

    }
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.progress_dialog, viewGroup);
    // this is the progressBar I need to update 
    ArcProgress arcProgress = (ArcProgress) view.findViewById(R.id.arc_progress);
    dialog.setCancelable(false);
    dialog.setContentView(view);
    return dialog;
}

我是如何实现这一目标的? 使用默认ProgressDialog ,我可以毫无问题地更新百分比栏。

1 个答案:

答案 0 :(得分:1)

在AsyncTask中创建一个接口,如下所示:

public interface AsyncTaskDelegate{
    public void updateProgress(int progress);
}

然后在AsyncTask构造函数中,您需要对此委托的引用,如下所示:

private AsyncTaskDelegate mDelegate;

public MyAsyncTask(AsyncTaskDelegate del){
   this.mDelegate=del;
}

在此之后,您可以覆盖OnProgressUpdate,如下所示:

protected void onProgressUpdate(Integer... progress) {
     this.mDelegate(progress[0]);
}

然后在doInBackground中,无论何时想要更新进度,都要调用方法publishUpdate(someinteger)。

请记住保存对实现委托的进度条的引用,并在那里使用progressbar.setProgress()。