Xamarin.Android:在AlertDialog中检索选定的ListView元素

时间:2019-03-15 15:07:28

标签: c# android listview xamarin alertdialog

我正在Xamarin.Android中创建一个日历,该日历向您显示日期日历。点击日期后,它将获取当天的事件列表,以显示在ListView中的自定义适配器中,所有事件都在AlertDialog中。

我想要做的就是拥有它,以便当用户单击列表中的事件时,它会从该事件中获取信息(特别是指向事件网页的URL),然后允许该事件的PositiveButton AlertDialog用新的Activity打开该网站。

我毫不费力地创建AlertDialog并将ListView放入其中,并用事件填充列表。我使用代码located here进行了一些细微的修改。

我知道该事件已被选择,因为列表视图的布局文件中的android:listSelector属性正在按预期触发。但是,我只是无法弄清楚如何访问click事件或掌握所选项目的位置以访问其数据。在另一个Activity的{​​{1}}中,我只需执行以下操作:

ListView

这可以很好地获取该列表中各个项目的信息。但是尝试使用HistoricSitesListView.ItemClick += HistoricSitesListView_ItemClick; void HistoricSiesListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e) { code here } 对象做同样的事情会给我一个dialogView错误。将dialogView制成ListView并投射充气机会产生InvalidCast异常。

我修改的代码如下:

View has no definition for ItemClick

任何人和所有帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

解决了。

在AlertDialog.Builder中,我这样做:

dialog.SetView(dialogView);
EventListView = dialogView.FindViewById<ListView>(Resource.Id.eventListView);

然后在其外部

EventListView.Adapter = adapter;
EventListView.ItemClick += EventListView_ItemClick;

void EventListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {
        currentEventURL = EventStringList[e.Position].EventURL;
    }

我早些时候尝试过,但是有空引用异常。我以为是适配器或项目为空,但我只需要将视图的作用域设置为dialogView,因为它是在Calendar布局而不是EventList布局中查找eventListView。