2012-03-30 4 views
0

J'ai créé un ListView et pour le peupler j'emploie Adapter.en utilisant l'adaptateur pour afficher ListView Mono pour android

GetView() de Adapter classe est la suivante:

LayoutInflater inflater = activity.LayoutInflater; 
if (convertView == null) 
{ 
    convertView = inflater.Inflate(Resource.Layout.List_MktData, null); 
} 

DataRow dr; 
object[] row; 

if(position==0) 
{ 
    Console.WriteLine("In position 0"); 
    dr = result.Rows[0]; 
    row=dr.ItemArray; 

    tvCMPValue.Text=row[0].ToString(); 
    tvPrevClose.Text=row[1].ToString(); 
    tvOpen.Text=row[2].ToString(); 
    tvHigh.Text=row[3].ToString(); 
    tvLow.Text=row[4].ToString(); 
    tvClose.Text=row[5].ToString(); 
} 

else if(position==1) 
{ 
    Console.WriteLine("In position 1"); 
    dr = result.Rows[1]; 
    row=dr.ItemArray; 

    tvPercChgValue.Text=row[0].ToString(); 
    tvPrevCloseValue.Text=row[1].ToString(); 
    tvOpenValue.Text=row[2].ToString(); 
    tvHighValue.Text=row[3].ToString(); 
    tvLowValue.Text=row[4].ToString(); 
    tvCloseValue.Text=row[5].ToString(); 
} 

où tous les éléments commençant par tv sont TextView dans un ListView. Maintenant, le problème est lorsque j'exécute ce code, je reçois la sortie suivante, comme indiqué dans la capture d'écran.

Le contenu de Row1 et Row2 est affiché dans Row1' while Row2` montre des données correctes.

Je sais que c'est quelque chose lié à la variable position, mais après avoir passé beaucoup de temps dessus, je ne suis toujours pas capable de le casser.

Remarque: Les données proviennent de DataTable ayant deux lignes.

1er rang de ListView doit être rempli avec le 1er rang de DataTable en 2ème rangée de ListView doit être rempli avec la 2e rangée de DataTable.

Je suis débutant absolu quand il s'agit Mono pour Android, de sorte que toute aide appréciée ...

screen shot

Répondre

1

Qu'est-ce que vous avez est: 2 lignes qui ont une table dans chaque ligne, chacun consistant en deux rangées. Ce que vous voulez est: 2 lignes dans le ListView avec LinearLayout avec une ligne de TextViews.

Ensuite, faites ceci pour chaque appel à GetView:

LayoutInflater inflater = activity.LayoutInflater; 
if (convertView == null) 
{ 
    convertView = inflater.Inflate(Resource.Layout.List_MktData, null); 
} 

DataRow dr; 
object[] row; 

Console.WriteLine("In position " + position); 
dr = result.Rows[position]; 
row = dr.ItemArray; 

tvCMPValue.Text = row[0].ToString(); 
tvPrevClose.Text = row[1].ToString(); 
tvOpen.Text = row[2].ToString(); 
tvHigh.Text = row[3].ToString(); 
tvLow.Text = row[4].ToString(); 
tvClose.Text = row[5].ToString(); 

Résout deux problèmes: moins de code et cela devrait fonctionner. En outre, comme vous pouvez le constater, il existe un écart entre les deux éléments de la liste. c'est un résultat de la première ligne (table) dans la deuxième rangée (item de liste), ceci est la rangée de table d'en-tête, n'ayant aucune valeur.

+0

alors qu'en est-il des zones de texte restantes de la rangée 2? Comment les peupler? – GAMA

+0

Pourriez-vous poster le contenu de la ressource 'Resource.Layout.List_MktData'? – Matthew

+0

Sur la base de votre code ci-dessus, n'auras-tu jamais deux objets dans la liste? Vous pouvez utiliser une disposition de table à la place si c'est le cas. – Matthew