在Xamarin.Android应用程序中,我有一个以前填充的ListView。在正确触发的listview_ItemClick事件处理程序中,我想检索单击的listview- item视图的文本,以便在AlertDialog中显示有关它的一些信息。
我的代码无法正常工作,因为我所能得到的只是一个Java.Lang.Object(lvItem),而且我不知道如何从中提取所需的视图。
private void lv_ItemClick(object sender, AdapterView.ItemClickEventArgs e) { lvItem = lv.GetItemAtPosition(e.Position); // lvItem is a Java.Lang.Object Toast.MakeText(this, + "you clicked" + lvItem, ToastLength.Long).Show(); }
如果我这样运行,Toast将打印:
您单击了System.Collections.Generic.Dictionary‘2 [System.String,System.String]
请注意,每个ListView行都由两个TextView组成,我通过将List传递List<Dictionary<string,string>>给ListView Adapter构造函数来填充ListView 。
List<Dictionary<string,string>>
简单地说:
列表显示
| textView1 | textView2 | -–>项目1
| textView1 | textView2 | ->第2项
如果用户单击ListView的item2,则需要检索项目2的textView1.Text或textView2.Text。
我还考虑过这样做:
FindViewById<TextView>(resultsListView.GetItemIdAtPosition(e.Position);
但是适配器GetItemIdAtPosition返回的是long类型而不是int类型,因此我不确定它是否是同一类型的ID。
以下内容也不起作用(我认为是相同的lv.GetItemAtPosition(e.position):
lv.GetItemAtPosition(e.position)
lv.Adapter.GetItem(e.Position);
也许有这样的事情?
lvItem = lv.GetItemAtPosition(e.Position);
尽管我不确定它是否可以与Java对象一起使用,但是也许可以借助此线程来强制转换该对象?https://forums.xamarin.com/discussion/7894/how- to-convert-a-type-to-java-lang- object
将 Java.Lang.Object 转换为 C# :
public static class ObjectTypeHelper { public static T Cast<T>(this Java.Lang.Object obj) where T : class { var propertyInfo = obj.GetType().GetProperty("Instance"); return propertyInfo == null ? null : propertyInfo.GetValue(obj, null) as T; } }