2016-09-24 1 views
0

Je veux avoir des barres de progression individuelles pour les TextView individuelles que j'ai. Par exemple, chaque TextView affiche une sorte d'information que j'utilise pour interroger à partir de ma base de données. Je peux utiliser AsyncTask pour cela, et dans postExecute je sais que je peux montrer les informations TextView que je veux afficher. Cependant, le problème est, je fais plusieurs appels asynchrones lorsque la page se charge pour obtenir des informations différentes de ma base de données et je veux afficher un ProgressBar pour chacun des TextView qui ont des informations affichées. Est-il possible de faire un show ProgressBar jusqu'à ce que les informations TextView soient disponibles dans ma base de données? Je me demande simplement en termes d'interface utilisateur que je sais comment faire des appels de base de données déjà.Comment avoir des barres de progression séparées pour des vues de texte séparées

Je sais que je peux le faire avec mon AsyncTask:

@Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 

     //showDialog() here; 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 

     //do what you want here// 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 

     //dismissDialog() here;// 


    } 

Mais il semble que si je fais showDialog(), je sais que je dois créer 4 différents ProgressBar s dans mon XML mais comment pourrais-je Assurez-vous qu'ils seraient seulement où mon TextView se trouve et pas sur l'ensemble de l'écran?

+0

est barre de progression à côté du textview ok avec votre exigence du projet? – user1506104

+0

@ user1506104 Je voudrais que la barre de progression soit affichée jusqu'à ce que les informations de la base de données soient saisies. Ensuite, je voudrais mettre la visibilité de la barre de progression à disparaître et montrer le 'TextView' où la barre de progression était lorsque l'information est prête à être affichée – user1871869

Répondre

0

Vous pouvez afficher une barre de progression à côté de chaque textview pour afficher le champ est toujours en chargement les données:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 

    <ProgressBar 
     android:id="@+id/progressbar" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:indeterminate="true" /> 
</LinearLayout> 

Une fois que vous avez les données prêtes pour une textview, vous pouvez appeler son correspondant setVisibility(View.GONE) sur l'objet vue. Vous devriez l'appeler à partir de votre onPostExecute().

0

Votre fichier de mise en page (activity_main.xml) peut ressembler à ceci:

enter image description here

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 


<LinearLayout 
    android:layout_marginTop="50dp" 
    android:background="@android:color/black" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="50dp" 
    android:orientation="horizontal"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:textSize="18dp" 
     android:textColor="@android:color/white" 
     android:text="contents of textview 1" /> 

    <ProgressBar 
     android:id="@+id/progressbar1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 

<LinearLayout 
    android:background="@android:color/black" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:textSize="18dp" 
     android:textColor="@android:color/white" 
     android:text="contents of textview 2" /> 

    <ProgressBar 
     android:id="@+id/progressbar2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 


</LinearLayout> 

Puis dans votre activité, déclare ce qui suit:

ProgressBar progressBar1,progressBar2; 

et le OnCreate() méthode de l'activité,

progressBar1=(ProgressBar)findViewById(R.id.progressbar1); 
progressBar2=(ProgressBar)findViewById(R.id.progressbar2); 

et enfin, dans votre onPostExecute() méthode, cacher la barre de progression correspondante:

progressBar1.setVisibility(View.GONE); 

et/ou,

progressBar2.setVisibility(View.GONE);