2016-07-07 5 views
4

Ich habe 3 Aktivitäten miteinander verknüpft. Wenn ich auf einen Aspekt der 1. Aktivität klicke, navigiere ich zur zweiten, und beim Klicken auf einen Aspekt der zweiten gehe ich zur dritten. Das Problem ist, dass es viel Zeit kostet und der Bildschirm einfriert. Mein Programm ist zu groß, um die AsyncTask aufzunehmen. Gibt es überhaupt einen Fortschrittsdialog wie "Bitte warten", wenn ich von einer Aktivität zu einer anderen navigiere. Es wird viel benutzerfreundlicher sein als ein nicht reagierender Bildschirm. Und ich meine, bis der Inhalt der neuen Aktivität angezeigt wird.Wie man einen Fortschrittsbalken-Dialog zeigt, unabhängig davon, was im Hintergrund passiert. UI

+0

Nur ein Gedanke ... haben Sie jemals einen 'ViewPager' in Erwägung gezogen und Ihren Code von' Aktivitäten' nach 'Fragmente' verschoben? Auf diese Weise laufen alle 3 in der gleichen Aktivität und machen den Wechsel zwischen ihnen glatt und ohne Verzögerung. – AndreiBogdan

+1

zeigen Sie einfach einen alertDialog am Anfang von 'onCreate' an und verwerfen Sie ihn, wenn Ihre Ansicht vollständig am Ende von' onCreate() '.. geladen wird !! –

Antwort

1

Wenn Sie von Activity1 zu Activity2 bewegen und

  • Ihre Anwendung friert auf Activity1, dann warum nicht nur ein Overlay auf jeder Activity haben, ein einfaches TextView mit match_parent auf jeder Seite, und einige Text, ist zunächst auf Visibility.GONE eingestellt und bevor Sie die nächste Activity starten, legen Sie einfach die Sichtbarkeit auf Visibility.VISIBLE?

Sie die Sichtbarkeit in onStart-GONE zurücksetzen zurück (dh, wenn Sie auf Aktivität drücken 2 zurück und onStart zurück zur Aktivität 1, auf Aktivität 1 ist gekommen legen Sie die Sichtbarkeit zu GONE)

  • Ihre App friert auf Activity2 ein, dann setzen Sie die TextView standardmäßig sichtbar in Ihrem xml und dann setzen Sie die Sichtbarkeit auf GONE sobald Sie fertig sind, was auch immer es ist, die den Bildschirm einfriert.

Ich empfehle eine einfache Verwendung TextView anstelle eines ProgressBar wie Sie, dass die gefriert App gesagt, also, wenn es friert ich bin Vermutung der ProgressBar selbst nicht animiert werden, so dass keine Verwendung in mit Teilen für diese bewegen.

+0

ist eine gute Idee. aber ich darf es nicht so machen. Dies ist für ein Unternehmen und sie haben strenge Standards für die Anwendung UI .. –

+0

können Sie alles zu einem ViewPager ändern? Verschieben Sie alle Funktionen von den Fragmenten in Aktivitäten? Oder ist das nicht auch "erlaubt"? Es würde das UX/UI überhaupt nicht beeinflussen ... – AndreiBogdan

+1

eine andere Frage ... warum friert es ein? Was machst du, dass es einfriert? Können Sie diesen Code nicht ausführen, nachdem onResume aufgerufen wurde? Oder können Sie Ihre Inhalte in einen anderen Thread verschieben, eine AsyncTask verwenden und mithilfe von onProgressUpdate nur die erforderlichen Daten an den UI-Thread senden? – AndreiBogdan

1

Deklarieren Sie eine AsyncTask, und zeigen Sie dann einfach ProgressDialog auf preExecute von AsyncTask an. Machen Sie das zeitaufwändige und das Einfrieren von Anwendungen wie das Abrufen von Daten von Link auf doInBackground. Funktioniert der Post-Link-Abruf in onPostExecute von asyncTask und schließt den `ProgressDialog 'ab. AsyncTask wird auf einem anderen Thread von der Hauptaktivität ausgeführt und daher friert die Anwendung nicht ein.

// ASYNC TASK 
    class ClassName extends AsyncTask<String, Void, Integer> { 
     protected void onPreExecute() { 
      progress = ProgressDialog.show(context, "", "Loading ...", 
        false, true); 
     } 

     @Override 
     protected Integer doInBackground(String... params) { 
      // Your Code 
     } 

     protected void onPostExecute(Integer result) { 

      if (progress != null) { 
       progress.dismiss(); 
      } 
     } 
    } 
Verwandte Themen