ajouter dynamiquement mise en page en méthode getview de l'adaptateur dans android
Je veux afficher le nombre N de imageview dans chaque ligne de la vue liste.
Nombre de imageview dépend json l'analyse de la valeur. il peut être 2 ou 3 ou 4 à chaque fois lorsque j'extrais json à partir du serveur.
donc je ne peux pas utiliser des données xml à l'aide de gonfler.j'ai donc décidé de créer point de vue dynamique dans la méthode getview et ajouter un nombre N de imageview en vue
J'écris code suivant mais il continue d'afficher une imageview de défilement horizontale et ne fonctionnent pas du tout..
toute aide est appréciée
public class MyAdapter extends BaseAdapter{
private LayoutInflater inflater;
private ArrayList<String> data;
Context con;
public MyAdapter(Context context, ArrayList<String> data1){
//Caches the LayoutInflater for quicker use
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//Sets the events data
data= data1;
con=context;
}
public View getView(int position, View view, ViewGroup viewgroup) {
ViewHolder holder=new ViewHolder(); //our view holder of the row
if (view == null) {
HorizontalScrollView hr=new HorizontalScrollView(con);
LinearLayout layout=new LinearLayout(con);
layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
//layout set some properties
for(int i=1;i<2;i++)
{
holder.image =new ImageView(con);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100*i, 100*i);
holder.image.setLayoutParams(layoutParams);
layout.addView(holder.image);
}
//subtitle set some properties
//CREATING THE LAYOUT THROUGH CODE
hr.addView(layout);
view = hr; //INSTEAD OF INFLATING A LAYOUT FOR THE ROW I JUST BINDED IT TO THE RECENTLY CREATED LAYOUT
//bind the views of the holder to the views of the layout
view.setTag(holder);
Log.w("myapp", "new view");
}
else
{
holder = (ViewHolder) view.getTag();
Log.w("myapp", "in reuse");
}
//rest of implementation of the View
for(int i=0;i<2;i++)
{
holder.image.setImageResource(R.drawable.ic_launcher);
}
return view;
}
static class ViewHolder {
ImageView image;
TextView title;
TextView type;
HorizontalScrollView hr;
}
@Override
public int getCount() {
//TODO Auto-generated method stub
return 4;
}
@Override
public Object getItem(int position) {
//TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
//TODO Auto-generated method stub
return 1;
}
}
OriginalL'auteur Swap-IOS-Android | 2013-06-28
Vous devez vous connecter pour publier un commentaire.
Vérifier c'est ce que vous voulez, je suppose. Juste mis en valeur aléatoire pour chaque ligne dans les images
je sais que ... mais je le fais délibérée..... pour juste faire "o" terrible à l'agréable ......
et je ne suis pas disposé à donner le mauvais style de codage des conseils pour les débutants qui ne savent pas mieux...
je suis désolé cher....... je ne voulais pas dire que...... pour échanger s'il vous plaît ne pas utiliser "o"
+1 me donner des conseil pour faire mon travail
OriginalL'auteur Aarun
cela signifie qu'il s'exécute une seule fois, pour i = 1, car sur le côté de la boucle de i == 2 et, par conséquent, est i < 2 faux.
OriginalL'auteur WarrenFaith
Ainsi, de la même manière que vous gonflez afficher les éléments de votre mise en page xml, vous pouvez créer ceux de la programmation, comme d'habitude. Juste besoin de faire assurez-vous de spécifier les paramètres de mise en page et les ajouter à la mise en page de sorte qu'ils sont visibles:
Par exemple, prendre le point de vue lié à votre ViewHolder initialisation:
De même, si vous souhaitez ajouter dynamiquement votre point de vue à votre disposition, dans la getView() méthode:
Pour plus d'infos ajout de vues par programme vérifiez Android: Ajouter le texte de deux opinions par programmation
Eh bien, ce que vous revenir à la fin de la méthode est ce qui est montré. En retournant la voir trois fois, vous n'obtenez pas les 3 images tirées, au lieu de la 3 d'entre eux sont établis de manière séquentielle et, évidemment, vous l'aurez vu le dernier. En plus de cela je ne voudrais pas utiliser que viewHolder approche. Le viewHolder devrait être le point de vue, et à l'intérieur, vous pouvez placer le reste du contenu. Votre façon actuelle n'aide pas beaucoup sur le recyclage.Vérifier sriramramani.wordpress.com/2012/07/25/... .Enfin, l'imageview n'est pas statiquement ajoutée,c'est juste un exemple par ligne
OriginalL'auteur Jose L Ugia