【问题标题】:using Adapter to display ListView Mono for android使用适配器显示 ListView Mono for android
【发布时间】:2012-03-30 05:09:10
【问题描述】:

我创建了一个ListView 并使用Adapter 填充它。

Adapter类的GetView()如下:

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 开头的元素都是 TextViewListView 中。

现在的问题是,当我运行此代码时,我得到如下输出,如屏幕截图所示。

Row1Row2 的内容显示在 Row1' whileRow2` 中显示正确的数据。

我知道这与position变量有关,但是在花了很多时间之后,我仍然无法破解它。

注意:数据来自DataTable,有两行。

ListView 的第一行应填充DataTable 的第一行,ListView 的第二行应填充DataTable 的第二行。

对于 Android 的 Mono,我绝对是初学者,所以任何帮助表示赞赏...

【问题讨论】:

    标签: c# android android-listview adapter xamarin.android


    【解决方案1】:

    您拥有的是:2 行,每行都有一个表格,每行包含两行。 你想要的是:ListView 中有 2 行,LinearLayoutoneTextViews

    然后,为每次调用 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();
    

    解决了两个问题:更少的代码,它应该可以工作。 此外,您可能会注意到,列表中的两个项目之间存在差距。这是第二行(列表项)中第一行(表)的结果,这是表头行,没有任何值。

    【讨论】:

    • 那么第 2 行的剩余文本框呢?如何填充它们?
    • 你能把Resource.Layout.List_MktData资源的内容贴出来吗?
    • 根据您上面的代码,列表中是否只有两个项目?如果是这种情况,您可以使用表格布局。
    • 得到了解决方案,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多