2017-09-04 4 views
0

Ich möchte Fortschrittsbalken in Aktivität während des Ladens von Daten anzeigen und wenn Laden abgeschlossen, Fortschrittsbalken ausblenden (GONE) sein! und versuchen, diesen Code: (klicken zum Laden von Daten)Wie wird die Fortschrittsanzeige angezeigt, während Daten geladen und in die Recycler-Ansicht eingefügt werden?

private void allMoment() { 
    BTN_ALL.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      try { 
       TBL_MOMENT = new TableMoment(DB_HELPER); 
      // MOMENTS = TBL_MOMENT.MOMENT_LIST(); 
       new loadTask().execute(); 
       filterResult(); 
       EDT_SEARCH.setText(""); 
      } catch (Exception e) { 
       displaySnackBar(v, "خطا:" + "\n" + e.toString()); 
      } 
     } 
    }); 
} 

und Task-Methode:

private class loadTask extends AsyncTask<String, Integer, Boolean> { 
    @Override 
    protected void onPreExecute() { 
     PROGRESS_LOADER.setVisibility(View.VISIBLE); 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     PROGRESS_LOADER.setVisibility(View.GONE); 
     adapter.notifyDataSetChanged(); 
     super.onPostExecute(result); 
    } 

    @Override 
    protected Boolean doInBackground(String... params) { 
     MOMENTS = TBL_MOMENT.MOMENT_LIST(); 
     try { 
      Thread.sleep(3000); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 
} 

und füllen Recycler mit dapter:

private void filterResult() { 
    try { 
     adapter = new HistoryAdapter(this, MOMENTS); 
     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(adapter); 
    } catch (Exception e) { 
     displayToast(this, "خطای آداپتر:" + "\n" + e.toString()); 
    } 
} 

aber Datenlast werden und füllen in Recyclerview und zeigen Sie keine Fortschrittsbalken , wie Sie dieses Problem beheben?

Antwort

1

Sie haben:

new loadTask().execute(); 
filterResult(); 
EDT_SEARCH.setText(""); 

Dieser execute() Anruf inmediatly zurückgibt, wenn Sie einen AsyncTask ausführen für ein Ergebnis warten Sie nicht ein Ergebnis bis AsyncTask.doInBackground() zurückkehrt und AsyncTask.onPostExecuted()

Ist das filterResult(); genannt wird Zeitaufwendig ? ... Wenn der Haupt-UI-Thread blockiert ist, wird die Benutzeroberfläche nicht aktualisiert.

+0

"Ist das filterResult(); zeitaufwendig?" Ja ... ich möchte, während Daten geladen werden, Benutzer sehen Fortschrittsbalken –

+0

Wenn filterResult(); Blockiert den UI-Thread Die ProgressBar wird nicht angezeigt oder aktualisiert. Sie sollten filterResult() in einem separaten Thread ausführen. –

0

Wie soll dieser Fortschrittsbalken funktionieren? Sie können im Internet nach einem Gif suchen. Wenn Sie ein Bild gefunden haben, das Ihren Kriterien entspricht, müssen Sie es beim Öffnen der Aktivität anzeigen. Wenn Sie Ihre RecyclerView auffüllen, legen Sie die Sichtbarkeit des Gifs als GONE fest.

Verwandte Themen