2012-03-30 1 views
0

Я создал ListView и заполнил его. Я использую Adapter.с использованием адаптера для отображения ListView Mono для android

GetView() из Adapter класса выглядит следующим образом:

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(); 
} 

, где все элементы, начинающиеся с тв являются TextView в ListView.

Теперь проблема в том, когда я запускаю этот код, я получаю следующий вывод, как показано на снимке экрана.

г. Содержание Row1 и Row2 отображается в Row1' while Строка содержит корректные данные.

Я знаю, что это связано с position переменной, но, потратив много времени на это, я все еще не в состоянии взломать его.

Примечание: данные поступают из DataTable, имеющих два ряда.

первый ряд ListView должны быть заполнены с 1-го ряда DataTable в то время как второй ряд ListView должны быть заполнены 2 строки DataTable.

Я абсолютный новичок, когда дело доходит до Mono для Android, так что любая помощь оценили ...

screen shot

ответ

1

Что у вас есть: 2 строки, которые имеют таблицу в каждой строке, каждая из которых состоит из двух рядов. Вы хотите: 2 ряда в ListView с LinearLayout с один ряд TextViews.

Затем, сделайте это для каждого вызова 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(); 

Решает две проблемы: меньше кода, и он должен работать. Кроме того, как вы можете заметить, между двумя элементами списка есть пробел. это результат первой строки (таблицы) во второй строке (элемент списка), это строка таблицы заголовков, не имеющая никаких значений.

+0

то как насчет оставшихся текстовых полей строки 2? Как их заполнять? – GAMA

+0

Не могли бы вы разместить содержимое ресурса Resource.Layout.List_MktData? – Matthew

+0

Основываясь на вашем коде выше, будет ли у вас только два пункта в списке? Вместо этого вы можете использовать табличный макет, если это так. – Matthew