Ich habe ein Fragment, um eine Kalendermonatsansicht mit spezifischen Bildern für jedes Datum zu zeigen, das von einer Logik in der Laufzeit entschieden wird. Da das Laden des Fragments einige Zeit in Anspruch nimmt, möchte ich einen Fortschrittsbalken anzeigen. Da der Fortschrittsbalken selbst Teil der Fragmentansicht ist, wie kann ich es anzeigen, bevor asynctask beendet ist. Die Fragmentansicht wird gemäß der Logik in asynctask erstellt.Wie wird der Fortschrittsbalken angezeigt, bevor das Fragment geladen wird, wenn das Laden von Fragmentansichten Teil von asynctask ist?
Zeigt ein Code-Snippet für Klarheit.
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();
}
}
}
Können Sie einen Code vorschlagen, der zeigt, wie das gemacht werden kann? – truespan