繁体   English   中英

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

[英]How to get the data of a ListView item the user has clicked on with listview.GetItemAtPosition(e.Position)?

在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<Dictionary<string,string>>传递给ListView Adapter构造器来填充ListView。

简单地说:

列表显示

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

试试这个可能会有所帮助

void OnListItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
var listView = sender as ListView;
var t = tableItems[e.Position];
Android.Widget.Toast.MakeText(this, t.Heading,   
Android.Widget.ToastLength.Short).Show();
}
List<Dictionary<string,string>> lstItems;

lstItems包含所有列表项,该列表项已加载到listview中。 从listView单击侦听器,您将获得所选项目的位置。 假设是 然后,您可以从lstItems中获取该项目。

private void lv_ItemClick(object sender, AdapterView.ItemClickEventArgs e) {

    Dictionary<string,string> selectedItem=lstItems.get(e.Position);
    // toast necessary information using selectedItem object

}

您可以使用一个按钮来捕捉单击“Ítem”的按钮。

您可以像这样设置Position元素。

int position = FindViewById(Resource.Id.listIncindentes).CheckedItemPosition;

像这样的元素值。

var value = FindViewById(Resource.Id.listIncindentes).GetItemAtPosition(position);

我认为你可以做这样的事情((TextView)e.View).getText().toString()

检查以下代码以使用“特殊文本视图”和“列表视图项”中的其他视图。

喜欢 :

TextView mTextView =(TextView)listview.getChildAt(0).findViewById(R.id.text);

您可以轻松获取Listview的列表项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM