如何在加载数据时在 AsyncTask 上实现旋转 ProgressBar?
Posted
技术标签:
【中文标题】如何在加载数据时在 AsyncTask 上实现旋转 ProgressBar?【英文标题】:How do I implement a spinning ProgressBar on a AsyncTask while the data is loading? 【发布时间】:2018-06-25 00:03:38 【问题描述】:假设我有这个代码:
XML
<FrameLayout android:layout_
android:layout_
xmlns:android="http://schemas.android.com/apk/res/android" >
<android.support.v7.widget.RecyclerView
android:id="@+id/photo_recycler_view"
android:layout_
android:layout_/>
</FrameLayout>
程序
private class FetchItemsTask extends AsyncTask<Void, Void, List<GalleryItem>>
private String mQuery;
public FetchItemsTask(String query)
mQuery = query;
@Override
protected List<GalleryItem> doInBackground(Void... params)
if (mQuery == null)
return new FlickrFetchr().fetchRecentPhotos();
else
return new FlickrFetchr().searchPhotos(mQuery);
@Override
protected void onPostExecute(List<GalleryItem> galleryItems)
mItems = galleryItems;
setupAdapter();
当 AsycnTask 在后台工作时,如何实现一个旋转的 ProgressBar 并隐藏 RecyclerView?抱歉,这似乎是一个简单的问题,但我发现的唯一答案是使用 ProgressDialog,它在 API 26 中已被弃用。提前谢谢您。
【问题讨论】:
ProgressBar
已被弃用,因为它会阻止 UI。谷歌认为你应该这样做,但你应该在你的视图中显示 loadingSpinner。但如果你不在乎,你可以使用 ProgressDialog 就好了。
【参考方案1】:
覆盖预执行方法并显示进度对话框。
【讨论】:
【参考方案2】:您可以在onPreExecute()
中显示微调器并在onPostExecute()
中隐藏它。
class Your_Class extends AsyncTask<...>
ProgressBar pb;
Your_Class()
// initialize pb
Protected void onPreExecute()
// show progressbar
protected void onPostExecute(Bitmap image)
// hide progressbar
【讨论】:
以上是关于如何在加载数据时在 AsyncTask 上实现旋转 ProgressBar?的主要内容,如果未能解决你的问题,请参考以下文章
如何在已加载到 PDFView 的 PDF 上实现文本到语音