2017-09-04 6 views
0

Je veux afficher la barre de progression de l'activité pendant le chargement des données et lors du chargement complet, barre de progression à masquer (GONE)! et essayez ce code: (cliquez sur le bouton pour charger des données)Comment afficher la barre de progression pendant le chargement des données et le remplissage dans recyclerview?

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

et méthode de travail:

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

et remplir recycleur avec 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()); 
    } 
} 

, mais les données deviennent charge et remplir dans recyclerview et ne montrent pas la barre de progression comment résoudre ce problème?

Répondre

1

Vous avez:

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

Cet appel retourne inmediatly execute(), si vous exécutez une AsyncTask en attente d'un résultat que vous ne disposez pas d'un résultat jusqu'à ce que AsyncTask.doInBackground() retours et AsyncTask.onPostExecuted() est appelé

Est-ce filterResult(); long ? ... si le thread principal de l'interface utilisateur est bloqué, l'interface utilisateur ne sera pas mise à jour.

+0

"Est-ce que filterResult() prend du temps?" Oui ... je veux pendant que les données sont chargées, l'utilisateur voit la barre de progression –

+0

Si filterResult(); bloque le thread d'interface utilisateur le ProgressBar ne sera pas affiché ou mis à jour, vous devez exécuter filterResult() dans un thread séparé. –

0

Comment voulez-vous que cette barre de progression fonctionne? Vous pouvez rechercher un gif sur Internet, une fois que vous en avez trouvé un qui correspond à vos critères, vous devez l'afficher lorsque vous ouvrez l'activité. Lorsque vous remplissez votre recyclerView, vous définissez la visibilité du gif comme GONE.