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

时间:2017-11-04 06:14:02

标签: android android-fragments android-asynctask progress-bar

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

为了清晰起见,显示了一些代码段。

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();
    }

}
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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