我需要在自定义布局中更新自定义 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 ,我可以毫无问题地更新百分比栏。
答案 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()。