如何使用listview.GetItemAtPosition(e.Position)获取用户点击的ListView项目的数据?

2024-04-29

在 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, 系统.字符串]

请注意,每个 ListView 行都由两个 TextView 组成,我通过传递一个来填充 ListViewList<Dictionary<string,string>>到 ListView 适配器构造函数。

简单来说:

LISTVIEW

|文本视图1 |文本视图2 | ---> 第 1 项

|文本视图1 |文本视图2 | ---> 第 2 项

如果用户单击 ListView 的 item2,我需要检索 item 2 的 textView1.Text 或 textView2.Text。

我也想过这样做:

FindViewById<TextView>(resultsListView.GetItemIdAtPosition(e.Position);

但是 Adapter GetItemIdAtPosition 返回一个 long 而不是 int,所以我不确定它是否是同一种 Id。

以下内容也不起作用(我认为这与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 https://forums.xamarin.com/discussion/7894/how-to-convert-a-type-to-java-lang-object

转换Java.Lang.Object to 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;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用listview.GetItemAtPosition(e.Position)获取用户点击的ListView项目的数据? 的相关文章

随机推荐