Différentes mises en ligne dans la ListView
Ce poste est liée à ce ViewHolder ne fonctionne pas. Sur ce poste, j'ai suivi un tutoriel sur la façon d'utiliser ViewHolder
sur un ListView
. Ce que je veux maintenant, c'est d'avoir le dernier élément sur un ListView
d'avoir une mise en page différente que le reste. Voici mon code:
int lastpos = mList.size()-1;
System.out.println("position: "+position+" mlist: "+lastpos);
if(position==lastpos){
view = vi.inflate(R.layout.list_item_record, null);
holder.textView = (TextView)view.findViewById(R.id.record_view);
}else{
view = vi.inflate(R.layout.list_item_bn, null);
holder.textView = (TextView)view.findViewById(R.id.tv_name);
}
view.setTag(holder);
Je viens d'obtenir le ListView
taille de moins 1
et avoir une condition qui vérifie si la position actuelle est égal au dernier élément. Toutefois, ce code définit le dernier élément de mise en page comme les autres. getView
méthode code complet:
private class CustomListAdapter extends ArrayAdapter {
private ArrayList mList;
private Context mContext;
public CustomListAdapter(Context context, int textViewResourceId,
ArrayList list) {
super(context, textViewResourceId, list);
this.mList = list;
this.mContext = context;
}
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
final ToggleButton tb;
if (view == null) {
ViewHolder holder = new ViewHolder();
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int lastpos = mList.size()-1;
System.out.println("position: "+position+" mlist: "+lastpos);
if(position==lastpos){
view = vi.inflate(R.layout.list_item_record, null);
holder.textView = (TextView)view.findViewById(R.id.record_view);
}else{
view = vi.inflate(R.layout.list_item_bn, null);
holder.textView = (TextView)view.findViewById(R.id.tv_name);
}
view.setTag(holder);
}
final ItemsDisplay listItem = (ItemsDisplay) mList.get(position);
if (listItem != null) {
ViewHolder holder1 = (ViewHolder)view.getTag();
holder1.textView.setText(listItem.getTag());
view.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) { //--clickOnListItem
Toast.makeText(getBaseContext(),
"Button is "+position+" "+listItem.getTag(),
Toast.LENGTH_LONG).show();
}
});
tb = (ToggleButton) view.findViewById(R.id.toggleButton);
tb.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(tb.isChecked()){
Toast.makeText(getBaseContext(),
"Button is "+position+" checked:"+tb.isChecked()+" "+listItem.getTag(),
Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getBaseContext(),
"Button is "+position+" checked:"+tb.isChecked()+" "+listItem.getTag(),
Toast.LENGTH_LONG).show();
}
}
});
}
return view;
}
}
Quelqu'un pourrait-il m'aider?
collez votre plein code d'adaptateur...
ajouté. c'est le code complet.
si la boucle est d'appeler vérifier comme si(...){Syso("si la boucle")}
veuillez vérifier le Système de la..println("position: "+position+" mlist: "+lastpos); " dans n'importe quelle position de l'imprimer.
ajouté. c'est le code complet.
si la boucle est d'appeler vérifier comme si(...){Syso("si la boucle")}
veuillez vérifier le Système de la..println("position: "+position+" mlist: "+lastpos); " dans n'importe quelle position de l'imprimer.
OriginalL'auteur antonoVodka | 2012-03-12
Vous devez vous connecter pour publier un commentaire.
Mettre en œuvre les
getItemViewType()
etgetViewTypeCount()
pour votre adaptateur:et:
Puis dans le
getView()
méthode de découvrir ce type de vue de gonfler:L'exemple de la commentaires: http://pastebin.com/gn65240B (ou https://gist.github.com/2641914 )
Avez-vous fait défiler la liste vers le bas? Je pense que c'est normal pour obtenir uniquement les 5-6 position, probablement parce que ce sont la position que l'on peut voir sur l'écran, ce serait une perte pour appeler la
getView
méthode pour les postes qui ne sont pas vu encore. Si vous faites défiler la liste, vous pouvez voir les autres positions.je vois. cependant, la dernière ligne est toujours le même que le reste. j'ai essayé de transférer la dernière ligne à la première ligne, pour voir si elle fonctionne. il fonctionne, mais tous les 7 ligne est la même que la première ligne. seul le 1er doit être le seul à avoir une mise en page différente que le reste.
Vous êtes en train de faire quelque chose de mal dans la
getView
méthode et les lignes sont recyclés. J'ai fait un exemple simple ici( pastebin.com/gn65240B ) de sorte que vous pouvez voir un exemple de travail.j'ai essayé de travailler sur ce sujet, mais en quelque sorte je ne peux pas le suivre surtout quand ma mise en page ne marche pas traiter avec textview. J'ai remarqué à votre exemple, qu'elle est Listactivity. Il de l'importance? je l'ai mise en application à compter de l'activité et de la composante de l'activité est la listview.
OriginalL'auteur Luksprog
Le problème est que une fois que vous avez gonflé la vue, il peut être réutilisé de nombreuses fois dans n'importe quelle position. Je vous suggère la démarche suivante: vous gonflez tous, mais le dernier élément, comme d'habitude (y compris le point de vue du titulaire), mais pour le dernier élément que vous maintenez la référence comme un champ de
CustomListAdapter
et de retour à chaque fois que le dernier élément est demandé:OriginalL'auteur a.ch.