Comment afficher une Barre de progression sur une Vue tout en faisant un peu de travail?
J'ai vue avec EditText
, Button
et ListView
.
Bouton de onClick()
analyse certains site (cette partie fonctionne OK), mais il faut un certain temps pour afficher l'analyse de l'info dans ListView
, je veux donc afficher de petites ProgressBar
sur la place, où les ListView
devrait avoir lieu après un certain temps.
Donc, j'ai ajouter à ma mise en page (j'écris partie importante ici):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/layout1"
android:weightSum="1.0">
<EditText
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight=".86" />
<ImageButton
android:layout_height="match_parent"
android:layout_width="0px"
android:layout_weight=".14" />
</LinearLayout>
<RelativeLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_below="@id/layout1"
android:gravity="center"
android:layout_centerInParent="true"
android:id="@+id/progressbar" >
<ProgressBar
android:layout_height="wrap_content"
android:layout_width="wrap_content"
style="@android:style/Widget.ProgressBar.Small" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/layout1">
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
</RelativeLayout>
Dans le code source:
progressBar = (RelativeLayout) findViewById(R.id.progressbar);
Et à chaque fois que je veux montrer la ProgressBar
, je fais ceci:
progressBar.setVisibility(View.VISIBLE);
pour la désactivation:
progressBar.setVisibility(View.INVISIBLE);
Mais cela ne fonctionne pas.
Comment puis-je faire ce travail?
Mais cela ne fonctionne pas. - ce n'est pas très utile. Soins de mieux expliquer quel est le problème?
Je ne peux pas voir tout
D'accord avec Luksprog, mais je serais disposé à deviner votre analyse est bloquant (donc le setvisibility codes ne sont pas l'exécution jusqu'à la post-parse). Il ya une tonne de façons de résoudre cela, mais je ne recommande pas de faire une recherche pour la progressbar et asynctask (il y a d'autres façons de le faire ainsi, mais, fondamentalement, vous devez le coup d'envoi non bloquant displayprogressbar méthode en même temps que vous faites votre analyse, puis dans le displayprogressbar vérifier pour l'achèvement du processus d'analyse, avant de revenir).
Je devine que vous ajoutez que
édité le post. Oui, vous avez raison. Alors, que dois-je faire?
Je ne peux pas voir tout
ProgressBar
affiche. Il fonctionne exactement comme il a travaillé sans ajout de ProgressBar
bagatelles.D'accord avec Luksprog, mais je serais disposé à deviner votre analyse est bloquant (donc le setvisibility codes ne sont pas l'exécution jusqu'à la post-parse). Il ya une tonne de façons de résoudre cela, mais je ne recommande pas de faire une recherche pour la progressbar et asynctask (il y a d'autres façons de le faire ainsi, mais, fondamentalement, vous devez le coup d'envoi non bloquant displayprogressbar méthode en même temps que vous faites votre analyse, puis dans le displayprogressbar vérifier pour l'achèvement du processus d'analyse, avant de revenir).
Je devine que vous ajoutez que
RelativeLayout
avec le ProgressBar
pour votre fichier de mise en page, qui sera très probablement être incorrecte à la pousser hors de la zone visuelle rendant invisible. Mais sans voir la mise en page complète de fichier c'est juste une supposition.édité le post. Oui, vous avez raison. Alors, que dois-je faire?
OriginalL'auteur azizbekian | 2012-12-04
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas besoin de manipuler votre
ProgressBar
's de la visibilité.ListView
a une fonction appelée "vue vide" qui s'affiche uniquement si votreListView
est vide. Voici ce que vous devez faire pour l'utiliser:ListActivity
, l'utilisationandroid:id="@android:id/list"
pour votreListView
etandroid:id="@android:id/empty"
pour votreProgressBar
.ListActivity
, il y a unsetEmptyView()
méthode de votre
ListView
, qui permet de faire la même chose.La méthode ci-dessus convient le mieux si vous n'avez pas besoin de vider votre
ListView
(par exemple des données est chargé qu'une seule fois, à l'activité de démarrage). Si vous avez besoin de mettre des données après cela, il est préférable d'utiliserViewSwitcher
, qui a également un grand avantage - il vous permet d'appliquer une animation de transition. Pour plus de détails surViewSwitcher
, jetez un oeil à cette.OriginalL'auteur Andrii Chernenko
Vous n'avez pas besoin de nest votre
ProgressBar
dans un autreRelativeLayout
. Juste center dans votre page principale et de le mettre à la dernière de sorte qu'il reste au top.OriginalL'auteur znat
La
RelativeLayout
avec leListView
est de cacher votreProgressBar
.Modifier la mise en page comme ça et de voir comment ça se passe:Ont également un look lors d'une de mes réponses, pour un peu le même problème.
OriginalL'auteur Luksprog
Essayez d'utiliser une tâche asynchrone comme mentionné ci-dessus.
OriginalL'auteur Jameo
Pour ceux qui sont intéressés dans la réponse.
Principales balises sont écrits.
Et la
AsyncTask
:OriginalL'auteur azizbekian