当片段视图加载是异步任务的一部分时,如何在片段加载之前显示进度条?

Posted

技术标签:

【中文标题】当片段视图加载是异步任务的一部分时,如何在片段加载之前显示进度条?【英文标题】:How to show progress bar before fragment loading when fragment view loading is part of asynctask? 【发布时间】:2018-04-16 21:50:48 【问题描述】:

我有一个片段来显示日历月视图,其中包含运行时某些逻辑决定的每个日期的特定图像。由于片段加载需要一些时间,我想显示一个进度条。由于进度条本身是片段视图的一部分,我如何在 asynctask 完成之前显示它。片段视图是根据放置在 asynctask 中的逻辑创建的。

为了清楚起见,显示一些代码 sn-p。

public class CalendarMonthViewFragment extends Fragment implements OnCalculateMonthlyCompleted 

@BindView(R.id.progressBar) ProgressBar progressBar;

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                         @Nullable Bundle savedInstanceState) 

    new CalculateMonthlyDataTask(this, progressBar).execute(); //asynctask that decides the view
    return inflater.inflate(R.layout.calendar_monthview_fragment, container, false);



  private class CalculateMonthlyDataTask extends AsyncTask<Void, Void, MonthlyDataResult> 

    private OnCalculateMonthlyCompleted listener;
    private ProgressBar progressBar;

    private CalculateMonthlyDataTask(OnCalculateMonthlyCompleted listener, ProgressBar progressBar) 
        this.listener = listener;
        this.progressBar = progressBar;
    

    @Override
    protected void onPreExecute() 
        super.onPreExecute();
        //progressBar.setVisibility(View.VISIBLE);
    

    @Override
    protected void onProgressUpdate(Void... values) 
        super.onProgressUpdate(values);
    

    @Override
    protected void onPostExecute(MonthlyDataResult monthlyDataResult) 
        super.onPostExecute(monthlyDataResult);
        //progressBar.setVisibility(View.GONE);

        listener.onTaskCompleted(monthlyDataResult);
    

    @Override
    protected MonthlyDataResult doInBackground(Void... params) 

        panchangMonthlyController.calculateMonthlyCalendar();
        return panchangMonthlyController.getMonthlyDataResult();
    



【问题讨论】:

【参考方案1】:

我想出了一种使用 ProgressDialog 解决此问题的方法。在这种情况下,我只是在加载视图之前显示progressDialog,并在加载视图后取消progressDialog。

【讨论】:

【参考方案2】:

您必须在活动类中显示进度条并在片段加载时取消它

【讨论】:

你能推荐一些代码来说明如何做到这一点

以上是关于当片段视图加载是异步任务的一部分时,如何在片段加载之前显示进度条?的主要内容,如果未能解决你的问题,请参考以下文章

片段布局加载延迟

异步任务片段背景数据

从片段中调用分离的异步任务类

单击ListViewItem时Android加载片段

异步任务类完成后如何更改文本视图的值(在片段中)?

重新加载片段不起作用