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

标签 java c# android listview xamarin.android

在 Xamarin.Android 应用程序中,我有一个我之前填充的 ListView。 在正确触发的 listview_ItemClick 事件处理程序中,我想检索单击的 ListView 项 View 的文本,以便在 AlertDialog 中显示有关它的一些信息。

我的代码无法正常工作,因为我只能得到一个 Java.Lang.Object (lvItem),我不知道如何从中提取我需要的 View 。

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 会打印:

you clicked System.Collections.Generic.Dictionary'2[System.String, System.String]

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

简单来说:

ListView

| TextView 1 | TextView 2 | ---> 项目 1

| TextView 1 | TextView 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

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

关于java - 如何使用listview.GetItemAtPosition(e.Position)获取用户点击的ListView项的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36491960/

相关文章:

java - QR 的 ESC/POS 命令仅打印内容

java - Jackson HashMap,写入字符串时忽略映射名称

c# - 为什么字符串作为值类型,即使它是 C# 中的引用类型

android - 无法将 react-native 2 项目构建到手机

java - 使用 JFileChooser 输出多个文件

java - 为什么HashMap在退出方法后会重置?

c# - 如何在 Xamarin 表单中的内容页面中添加选项卡式页面

c# - 多人游戏同步

java - Okhttp3在请求加载之前关闭 Activity 使应用程序崩溃

android - 在 alpha 测试中删除 apk 以上传具有相同版本代码的不同的 apk