используя адаптер для отображения ListView Mono для Android - PullRequest
0 голосов
/ 30 марта 2012

Я создал ListView и для его заполнения я использую Adapter.

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

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

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

т.е. Содержимое Row1 и Row2 отображается в Row1' while Row2` показывает правильные данные.

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

Примечание. Данные поступают из DataTable, имеющего две строки.

1-й ряд ListView должен быть заполнен 1-м рядом DataTable, а 2-й ряд ListView должен быть заполнен 2-м рядом DataTable.

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

screen shot

1 Ответ

1 голос
/ 30 марта 2012

Что у вас есть: 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();

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

...