listView.SelectedItemPosition总是返回-1

时间:2016-08-09 13:08:19

标签: c# xamarin xamarin.android

我正在尝试在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?

2 个答案:

答案 0 :(得分:0)

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

int index = lsvSearch.SelectedIndices[0];

仅当MultiSelect设置为false时才有效!否则它只会给你第一个索引。

另一种可能性似乎是:

int index = lsvSearch.FocusedItem.Index;

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

答案 1 :(得分:0)

使用您的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));
    ....
}