我希望在后台生成表时显示圆形进度条。我在异步任务中的代码:
class DoWork extends AsyncTask<Void, Void, Void>{
Context context;
public DoWork(Context con){
this.context = con;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
setContentView(R.layout.content_progress);
pb = (ProgressBar) findViewById(R.id.progressBar);
pb.setVisibility(View.VISIBLE);
}
@Override
protected Void doInBackground(Void... params) {
runOnUiThread(new Runnable() {
public void run() {
setContentView(new TableMainLayout(context));
}
});
return null;
}
@Override
protected void onPostExecute(Void result) {
pb.setVisibility(View.INVISIBLE);
super.onPostExecute(result);
}
}
content_progress.xml中的代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.standart.trainschedule.ProgressActivity"
tools:showIn="@layout/activity_progress">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/progressBar"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
new TableMainLayout(context) - 生成一个包含数据的表格布局,也是一个UI,这就是我在doInBackground()中使用runOnUiThread()的原因
问题是当我在手机上运行我的应用程序时,它没有显示进度条。它冻结我的应用程序5秒。而不是向我展示生成的表格。
如何显示进度条?
答案 0 :(得分:0)
您的ProgressBar位于布局content_progress中。但是,您正在使用TableLayout替换该布局,并且之前的视图正在被覆盖。
您可以尝试在XML中预定义TableLayout和ProgressBar并将其设置为内容视图,或以编程方式定义RelativeLayout并将TableLayout和ProgressBar同时添加为视图
查看this answer,了解如何以编程方式添加progressBar。您也可以为TableLayout实现类似的方法。
答案 1 :(得分:0)
AsyncTask
的主要目的是在后台线程中加载一些内容,然后将其传递给UI线程。 doInBackground
在非UI线程中运行,但您可以在UI中运行...
因此,如果您的小部件是从SQL数据生成的,只需在doInBackground
上生成它并在setContentView
中执行onPostExecute
。