Я обнаружил несколько проблем с ListViews в Mono для Android, которые могут быть ошибками.Я опубликовал довольно простой проект, который более подробно демонстрирует обе эти проблемы здесь: Пример проекта
Мне интересно, если я делаю что-то не так или это законные ошибки.
Сначала , если вы пытаетесь использовать завышенное представление в качестве представления нижнего колонтитула для ListView, вызывая AddFooterView, он генерирует исключение ClassCastException.Использование динамически создаваемого представления работает нормально, но вы не можете применять стили к динамически создаваемому представлению .Так что это работает нормально:
goodButton.Click += delegate {
TextView tv = new TextView(this);
tv.Text = "THIS IS THE LIST FOOTER";
listView.AddFooterView(tv);
listView.Adapter = adapter;
Toast.MakeText(this, "Footer was added...", ToastLength.Short).Show();
};
Но это вызывает исключение ClassCastException:
TextView footerViewButton = FindViewById(Resource.Id.listFooterButton) as TextView;
badButton.Click += delegate {
listView.AddFooterView(footerViewButton);
listView.Adapter = adapter;
Toast.MakeText(this, "Custom Footer was moved...", ToastLength.Short).Show();
};
Second , если вы создаете ListView и устанавливаете дескриптор ItemClick,затем вызовите NotifyDataSetChanged () для ListView, событие ItemClick больше не вызывается:
protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
SetContentView(Resource.Layout.ItemClick);
ListView list = FindViewById(Resource.Id.itemClickList) as ListView;
mAdapter = new CustomAdapter(this, Countries);
list.Adapter = mAdapter;
list.ItemClick += new EventHandler<ItemEventArgs>(list_ItemClick);
}
CustomAdapter вызывает этот метод в действии, когда отображается последнее представление в списке:
public void GetMoreListItems() {
if (mAdapter.Count < Countries.Length + MoreCountries.Length) {
string[] allCountries = new string[Countries.Length + MoreCountries.Length];
Countries.CopyTo(allCountries, 0);
MoreCountries.CopyTo(allCountries, Countries.Length);
mAdapter.NotifyDataSetChanged(allCountries);
Toast.MakeText(this, "New items were loaded. Now Click action is broken.", ToastLength.Short).Show();
}
}