如何在加载数据时在 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WinRT 上实现延迟加载 GridView?

安卓片段。在屏幕旋转或配置更改期间保留 AsyncTask

如何在已加载到 PDFView 的 PDF 上实现文本到语音

如何解决替换 AsyncTask 以连接套接字的问题?

如何在android Firestore上实现Paginate查询[重复]

AsyncTask中SplashScreen的动画序列不起作用