列表视图.SelectedItemPosition返回-1总是

本文关键字:总是 返回 SelectedItemPosition 视图 列表 | 更新日期: 2023-09-27 18:01:24

我试图在Xamarin的ListView中获得单击项的位置,但使用SelectedItemPosition总是返回-1。

ListView lsvSearch;
List<SearchResultItem> searchResults;
protected override void OnCreate(Bundle bundle){
    ...
    lsvSearch = FindViewById<ListView>(Resource.Id.lsvSearch);
    lsvSearch.ItemClick += LsvSearch_ItemClick;
    ...
}
private void LsvSearch_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
    ....
    Bundle valuesForActivity = new Bundle();
    valuesForActivity.PutInt("placeId", searchResults[lsvSearch.SelectedItemPosition].resultId); // lsvSearch.SelectedItemPosition always returns -1
    Intent resultIntent = new Intent(this, typeof(AboutPlace));
    ....
}

我该如何解决这个问题?我怎样才能得到点击项目的位置,而不是-1?

列表视图.SelectedItemPosition返回-1总是

使用AdapterView.ItemClickEventArgs参数。它包含了很多有用的信息,在这里查看该类的参考:https://developer.xamarin.com/api/type/Android.Widget.AdapterView+ItemClickEventArgs/

对于您的特定问题,如果您想要所选项目的位置,则使用此:e.Position

private void LsvSearch_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
    ....
    Bundle valuesForActivity = new Bundle();
    valuesForActivity.PutInt("placeId", searchResults[e.Position].resultId); // lsvSearch.SelectedItemPosition always returns -1
    Intent resultIntent = new Intent(this, typeof(AboutPlace));
    ....
}

在Windows窗体中,可以这样访问选定的索引:

int index = lsvSearch.SelectedIndices[0];

这只适用于MultiSelect设置为false !否则,它将只给你第一个索引。

另一种可能是:

int index = lsvSearch.FocusedItem.Index;

请尝试并评论它是否也适用于Xamarin。我会等你的。(否则我删除这个答案)