c# - 如何从 IList Xamarin.Android c# 填充 ListView?
问题描述
你能帮我从 IList 中填充 ListView(不同的列)(Xamarin.Android)吗?
我已将数据添加到 IList - “readingList”
现在我正在努力在“lv”中填充它。我刚从 Xamarin.Android 开始为我辩护:P
IList<Readings> readingList = new List<Readings>();
ListView lv;
private void FillData()
{
lv = FindViewById<Android.Widget.ListView>(Resource.Id.gvLora);
try
{
Cn.OpenConnection();
NpgsqlCommand cmd = new NpgsqlCommand("SELECT encode(device_up.data::bytea,'base64') as Data,f_port, received_at,application_name, device_name FROM device_up", Cn.connection);
NpgsqlDataReader myReader = cmd.ExecuteReader();
while (myReader.Read())
{
Readings rd = new Readings();
rd.Data = (string)myReader["Data"];
rd.Received = (DateTime)myReader["received_at"];
rd.MeterNumber = (string)myReader["device_name"];
rd.Application = (string)myReader["application_name"];
rd.Port = (int)myReader["f_port"];
readingList.Add(rd);
}
Cn.CloseConnection();
}
catch { }
}
X
class Readings
{
public string Data { get; set; }
public DateTime Received { get; set; }
public string MeterNumber { get; set; }
public string Application { get; set; }
public int Port { get; set; }
}
谢谢你的帮助!
解决方案
首先,请确保您可以正确获取数据IList<Readings> readingList = new List<Readings>();
,我无法完全复制您的项目,所以我使用静态数据填充listview
.
public class MainActivity : AppCompatActivity
{
IList<Readings> readingList;
ListView listView1;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
listView1 = FindViewById<ListView>(Resource.Id.listView1);
FillData();
listView1.Adapter=new ReadingsAdapter(this, readingList);
}
private void FillData()
{
readingList = new List<Readings>();
readingList.Add(new Readings { Data="test1", Received=DateTime.Now, Application= "Application1", MeterNumber="123", Port=8080 });
readingList.Add(new Readings { Data = "test2", Received = DateTime.Now, Application = "Application2", MeterNumber = "1523", Port = 8081 });
readingList.Add(new Readings { Data = "test3", Received = DateTime.Now, Application = "Application3", MeterNumber = "1223", Port = 8180 });
readingList.Add(new Readings { Data = "test4", Received = DateTime.Now, Application = "Application4", MeterNumber = "1423", Port = 8080 });
readingList.Add(new Readings { Data = "test5", Received = DateTime.Now, Application = "Application5", MeterNumber = "1623", Port = 8380 });
readingList.Add(new Readings { Data = "test6", Received = DateTime.Now, Application = "Application6", MeterNumber = "1723", Port = 8480 });
}
根据您的Readings
模型,您可以创建一个BaseAdapter
来填充您的数据。
public class ReadingsAdapter : BaseAdapter<Readings>
{
MainActivity mcontext;
IList<Readings> list;
public ReadingsAdapter(MainActivity context, IList<Readings> list)
{
this.mcontext = context;
this.list = list;
}
public override Readings this[int position] => list[position];
public override int Count => list.Count;
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
View view = convertView;
if (view == null) // no view to re-use, create new
view = mcontext.LayoutInflater.Inflate(Resource.Layout.list_item, null);
view.FindViewById<TextView>(Resource.Id.Data).Text= list[position].Data;
view.FindViewById<TextView>(Resource.Id.Received).Text = list[position].Received.ToString();
view.FindViewById<TextView>(Resource.Id.MeterNumber).Text = list[position].MeterNumber.ToString();
view.FindViewById<TextView>(Resource.Id.Application).Text = list[position].Application;
view.FindViewById<TextView>(Resource.Id.Port).Text = list[position].Port.ToString();
return view;
}
}
在 baseAdapter 中,您应该创建一个自定义项目布局。这是list_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="111"
android:id="@+id/Data"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="111"
android:id="@+id/Received"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="111"
android:id="@+id/MeterNumber"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="111"
android:id="@+id/Application"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="111"
android:id="@+id/Port"
/>
</LinearLayout>
这是运行截图。
这是有关如何在 xamarin android 中使用 listview 的详细文档。
推荐阅读
- python - Google 日历 - 通过 API 休息使用 nextSyncToken 获取修改后的事件
- python - 我需要从英语句子中自动提取逻辑语句(SWRL)
- angularjs - 具有不同轴范围(平行坐标)的蜘蛛网图
- c# - 发布 UWP 项目
- sql - 重塑表 SQL
- python - 将 python 数据结构和 tf 张量的组合作为 tf.while_loop 变量传递
- python - 使用 os.walk() 加入子目录
- aws-appsync - Appsync 缺少解析器
- mongodb - 从文档中删除具有特定值的字段
- wordpress - Facebook 像素问题