Alrighty ici nous allons. Gardez à l'esprit que ceci est fait après une Requête HTTP, donc c'est l'implémentation d'une Tâche Asynchrone, j'ai juste laissé de côté ce bit car ce n'est pas pertinent pour la question que j'avais.
D'abord, créez 3 listes de choses. 1 Liste des mises en page (le conteneur de type div externe), 1 liste de vues de texte et 1 liste d'images vues. Pour mon exemple, je mis en boucle une liste de ma propre classe entreprise appelée:
private List<RelativeLayout> layoutContainers = new ArrayList<RelativeLayout>();
private List<TextView> textContainers = new ArrayList<TextView>();
private List<ImageView> imageContainers = new ArrayList<ImageView>();
....
@Override
protected void onPostExecute(List<Business> blist){
for(int i=0;i<blist.size();i++){
RelativeLayout newLayout = new RelativeLayout(mContext);
TextView tv = new TextView(mContext);
ImageView iv = new ImageView(mContext); //// or getApplicationContext()
tv.setId(1); iv.setId(2);
newLayout.addView(tv);
newLayout.addView(iv);
icons_row.addView(newLayout); // this is another relative layout created via XML as standard
RelativeLayout.LayoutParams layoutParms = (RelativeLayout.LayoutParams)newLayout.getLayoutParams();
RelativeLayout.LayoutParams textParms = (RelativeLayout.LayoutParams)tv.getLayoutParams();
RelativeLayout.LayoutParams imageParms = (RelativeLayout.LayoutParams)iv.getLayoutParams();
layoutParms.height = RelativeLayout.LayoutParams.MATCH_PARENT;
layoutParms.width = 175;
newLayout.setGravity(Gravity.CENTER_VERTICAL);
// Text Styling
textParms.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
textParms.width = RelativeLayout.LayoutParams.MATCH_PARENT;
tv.setBackgroundColor(R.drawable.my_border);
tv.setPadding(1, 5, 1, 2);
tv.setTextColor(Color.GREEN);
tv.setGravity(Gravity.CENTER_HORIZONTAL); // center text
// Image Styling - background set deeper inside
imageParms.addRule(RelativeLayout.BELOW, tv.getId());
imageParms.setMargins(35, 0, 0, 0);
imageParms.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
imageParms.width = RelativeLayout.LayoutParams.WRAP_CONTENT;
// set the params
tv.setLayoutParams(textParms);
iv.setLayoutParams(imageParms);
newLayout.setLayoutParams(layoutParms);
// add them to the lists (created above)
textContainers.add(tv);
imageContainers.add(iv);
layoutContainers.add(newLayout);
}
bearingTextView = (TextView)findViewById(R.id.bearingTextView);
gps.calculateBearing(compass, bearingTextView ,blist, textContainers, imageContainers,layoutContainers);
} // end on Post Execute
Je leur ai envoyé par mon GPS qui les avait envoyés à ma boussole. Pour apporter des modifications, par exemple, mettre à jour le texte, vous faites ce qui suit ... Prenant par exemple, la méthode calculateBearing indiquée ci-dessus ... En ignorant les autres valeurs, juste les conteneurs.
public class Gps{
private List<TextView> textContainers;
private List<ImageView> imageContainers;
private List<RelativeLayout> layoutContainers;
...
public void calculateBearing(Compass compass, TextView bearingText, List<Business> blist, List<TextView> textContainers,List<ImageView> imageContainers,List<RelativeLayout> layoutContainers){
this.textContainers = textContainers;
this.imageContainers = imageContainers;
this.layoutContainers = layoutContainers;
//eg. change the text
for(int i=0; i<textContainers.size(); i++){
textContainers.get(i).setText("This is text field: " + Integer.toString(i)); // will return, 1,2,3 etc depending on whatever textField is there
}
}
}
Gardez à l'esprit que j'appelle ces méthodes externes de onPostExecute, de sorte que l'interface utilisateur sera mis à jour. Si je n'étais pas clair sur quoi que ce soit, faites-le moi savoir