Comment actualiser le linéaire de la mise en page par programmation
Ma demande a un LinearLayout
que LinearLayout
se compose de 3 Linearlayouts
et que chaque linéaire de la mise en page ont un Relativelayout
et un linéaire de la mise en page(à l'origine de la visibilité de ces linéaires mises en page n'est plus là). Si vous cliquez sur la relative mise en page puis le concernant linéaire de la mise en page sera affichée. Mais comment faire pour actualiser l'ensemble du linéaire de la mise en page après avoir cliqué sur la mise en page.
Code:
private OnClickListener exit2Listener = new OnClickListener()
{
public void onClick(View v)
{
if(!exit2status)
{
if(RB_Constant.upcomingexits_obj.response.size() > 1)
{
if(RB_Constant.upcomingexits_obj.response.get(1).listRestaurants.size() > 0)
{
//Create the views on the fly instead of using the ListView
UpcomingResultsListViewAdapter2 rbupcadapter2 = new UpcomingResultsListViewAdapter2(RB_UpcomingExits.this);
int numItems2 = 0;
if(RB_Constant.upcomingexits_obj.response.get(1).listRestaurants.size() > 0)
{
numItems2 = RB_Constant.upcomingexits_obj.response.get(1).listRestaurants.size();
}
//linearLayout2
for(int position=0; position < numItems2; position++)
{
View convertview = null;
convertview = rbupcadapter2.getView(position, convertview, null);
listLayout2.addView(convertview);
}
}
}
else
{
//toastMsg("No results!");
}
listLayout2.setVisibility(View.VISIBLE);
exit2status=true;
if(!exit1status || exit3status || exit4status || exit5status)
{
//System.out.println("exit2 GONE");
listLayout1.setVisibility(View.GONE);
listLayout3.setVisibility(View.GONE);
exit1status = false;
exit3status = false;
}
LLExitDetails.invalidate();
}
else
{
System.out.println("exit2 GONE");
listLayout2.setVisibility(View.GONE);
exit2status = false;
LLExitDetails.invalidate();
}
}
};
OriginalL'auteur naresh | 2011-07-06
Vous devez vous connecter pour publier un commentaire.
Récupérer le LinearLayout qui contient tout. Lorsque vous avez besoin de "rafraîchir", appel
invalidate
. Seulement l'appeler dans le thread de l'INTERFACE utilisateur. Si vous appelez cela dans un autre thread (par exemple, une minuterie), puis d'appelerpostInvalidate
. À la fois la cause de la VueonDraw
méthode appelée lorsque l'OS est prêt à l'appeler.Ce qui se passe quand vous dites "ça ne marche pas"?
pas rafraîchissant. signifie qu'il n'est pas de montrer la première linéaire de la mise en page lorsque je suis à l'appel de l'invalider.
Si le problème est que les vues ne pas devenir invisible lorsque vous appelez .setVisibility(View.DISPARU), alors vous êtes sûr que ces méthodes sont appelés? Invalider est la façon dont vous voulez annuler votre point de vue. Une autre chose à essayer est d'appeler LLExitDetails.invalidate() à la fin de la "onClick" méthode à l'extérieur d'un if pour s'assurer qu'il est TOUJOURS appelé. Ensuite, vous pouvez optimiser lorsque vous avez la logique de la méthode a fonctionné.
je suis en train de monter l'invalider la fin de la onclick mais ça ne fonctionne pas
OriginalL'auteur DeeV
J'ai passé beaucoup de temps à résoudre ce problème aussi.
Et j'ai trouvé une méthode simple de rafraîchir LinearLayout en 3 lignes de code
Vous devez définir transperent couleur dans style.xml
Et dans le code d'appel pour définir l'arrière-plan
Si tu en a dessiné fond appel
OriginalL'auteur Николай Сколунов
Pour rafraîchir la vue comme un moyen graphique d'utilisation de l'invalider l'appel de onDraw() et pour recalculer vue des dimensions et de toute chose liée à la hauteur , la largeur , les marges et padding utilisation requestLayout c'est l'appel onMeasure()
OriginalL'auteur Mohamed Moamen
OriginalL'auteur Ismaran Duwadi