2017-11-23 1 views
1

In meiner XML-Datei für die MainActivity habe ich eine kreisförmige ProgressBar definiert, die ich immer anzeigen möchte, wenn meine App etwas lädt.ProgressBar wird nicht angezeigt, wenn ich View.GONE nach View.VISIBLE (aber nur auf älteren Telefonen) anrufe

private void refresh() { 
    new AsyncTask<Void, Void, Void>() { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      //show progress bar and blur background 
      progressBar.setVisibility(View.VISIBLE); 
      mainActivityScreen.setAlpha(0.5f); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      /*do something */ 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      super.onPreExecute(); 

      //hide progress bar and unblur background 
      progressBar.setVisibility(View.GONE); 
      mainActivityScreen.setAlpha(1.0f); 
     } 
    }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
} 

Wenn ich diesen Code auf meinem Nexus 6P laufen, es tut genau das, was es sein sollte. Ich klicke auf die Schaltfläche "Aktualisieren", eine Fortschrittsleiste wird angezeigt (die anfangs unsichtbar war), die App führt einige Netzwerkoperationen durch und wenn sie beendet ist, verschwindet die Fortschrittsleiste wieder. Jetzt, wenn ich den gleichen Code auf einem älteren Telefon laufen lasse, wird die progressBar nicht angezeigt. Zuerst dachte ich, vielleicht kann das Telefon nicht die progressBar laden, aber das ist nicht das Problem, da, wenn ich gehe, um die Linie

progressBar.setVisibility(View.GONE); 

es zeigt sich (aber offensichtlich nicht wieder verschwinden). Es ist auch kein Problem, dass es nicht lange genug angezeigt wird, um es zu bemerken, da die Netzwerkoperationen ungefähr 2 Sekunden dauern.

Kann mir bitte jemand sagen, warum das nur auf meinem neueren Telefon funktioniert und nicht auf einem älteren? Ich werde verrückt danach.

Vielen Dank im Voraus für jeden, der hilft.

EDIT: xml:

<ProgressBar 
    android:id="@+id/progressBar" 
    style="@android:style/Widget.DeviceDefault.ProgressBar" 
    android:indeterminateTint="@color/black" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:indeterminate="true" 
    android:visibility="gone"/> 
+0

Was ist die API-Ebene des älteren Telefons? –

+0

@AnjalSaneen 23 –

Antwort

1

ich deine Fehler sehen;

protected void onPostExecute(Void aVoid) { 
      super.onPreExecute(); 
      //hide progress bar and unblur background 
      progressBar.setVisibility(View.GONE); 
      mainActivityScreen.setAlpha(1.0f); 
     } 

Nach dem Beenden von onPostExecute rufen Sie erneut die Datei super.onPreExecute() auf.

entfernen Sie diese Zeile:

protected void onPostExecute(Void aVoid) { 
      //hide progress bar and unblur background 
      progressBar.setVisibility(View.GONE); 
      mainActivityScreen.setAlpha(1.0f); 
     } 
+0

Das ist in der Tat ein Fehler, danke. Aber leider löst es das Problem nicht. –

+0

Sind Sie sicher, dass Sie nicht progressBar.setVisibility (View.GONE) aufrufen; in einem anderen Teil Ihres Codes? – diegoveloper

+0

Ja, da bin ich mir sicher. Auch wenn ich es tun würde, würde es auch nicht auf meinem neueren Handy funktionieren. –

0

löste ich das Problem durch einen Handler anstelle eines AsyncTask verwenden. Irgendwie funktioniert das auf allen Telefonen. Danke für deine Hilfe trotzdem!

Verwandte Themen