Я создаю календарь в Xamarin.Android, который показывает вам календарь дат. При нажатии на дату он получает список событий в этот день для отображения в пользовательском адаптере в ListView
, все в пределах AlertDialog
.
Я хочу сделать так, чтобы, когда пользователь щелкает событие в списке, он извлекал информацию из этого события (в частности, URL-адрес веб-страницы события), а затем разрешал PositiveButton
из * 1006. * открыть этот сайт с новым Activity
.
У меня нет проблем с созданием AlertDialog
, размещением в нем ListView
и заполнением списка событиями. Я использовал код , расположенный здесь с некоторыми небольшими изменениями.
Я знаю, что событие выбрано, поскольку свойство android:listSelector
в файле макета списка запускается, как и ожидалось. Однако я просто не могу понять, как получить доступ к событию щелчка или захватить позицию выбранного элемента для доступа к его данным. В другом Activity
, который является просто ListView
, я просто делаю следующее:
HistoricSitesListView.ItemClick += HistoricSitesListView_ItemClick;
void HistoricSiesListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{ code here }
Снимает информацию об отдельных элементах этого списка в порядке. Но попытка сделать то же самое с объектом dialogView
дает мне ошибку View has no definition for ItemClick
. Делая dialogView ListView и приведение inflater дает исключение InvalidCast.
Мой модифицированный код выглядит следующим образом:
View dialogView = LayoutInflater.Inflate(Resource.Layout.EventsListLayout, null);
AlertDialog alertDialog;
using (var dialog = new AlertDialog.Builder(this))
{
dialog.SetView(dialogView);
dialog.SetPositiveButton("More Info", (s, a) =>
{
if (currentEventURL != "null")
{
Intent eventIntent = new Intent(Intent.ActionView, Android.Net.Uri.Parse(currentEventURL));
StartActivity(eventIntent);
}
});
dialog.SetNegativeButton("Close", (s, a) => { });
alertDialog = dialog.Create();
}
var adapter = new EventModelAdapter(this, EventStringList);
dialogView.FindViewById<ListView>(Resource.Id.eventListView).Adapter = adapter;
dialogView.ItemClick += dialogView_ItemClick;
void dialogView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
EventModel clickedEvent = EventStringList[e.Position];
currentEventURL = clickedEvent.EventURL;
};
alertDialog.Show();
Любая и вся помощь очень ценится.