0

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

} 
} 

Antwort

0

ich herausgefunden, dass ein Weg, um diese mit ProgressDialog zu lösen. Ich zeige nur den progressDialog, bevor die Ansicht in diesem Fall geladen wird, und annulliere den progressDialog, nachdem die Ansicht geladen wurde.

0

Sie müssen progressbar in der Aktivitätsklasse zeigen und es aufheben, wenn Fragment

geladen
+0

Können Sie einen Code vorschlagen, der zeigt, wie das gemacht werden kann? – truespan

Verwandte Themen