我的ListView
. 这是场景:
我正在使用 MVP 设计模式。在Activity
开始时,它会引发一个事件来通知演示者从 Web 服务中获取一些数据。Web 服务调用是异步调用。一旦Completed
引发 Web 服务事件,我将结果推送到我的View
/中的一个属性(数组类型)中Activity
。
我提到的一切都很好,但是一旦设备旋转,就会发生一些有趣的发展。
异步调用正常恢复并为属性 (Array) 提供一个值。所以那里没有错......(是的,集合中有数据)然后我设置ListView Adapter
并调用了notifyDataSetChanged
,但没有任何反应。用户界面没有更新还是什么?如果我重新输入Activity
数据再次可见??
我什至尝试打电话invalidateViews
给invalidate
-ListView
这没有做任何事情。
有人可以在这件事上帮助我吗?提前谢谢了!
[更新]
我想强调一个事实,即我使用的是 C# (Xamarin) 而不是 Java (:sigh: - 是的,我知道)。此外,我没有使用ASyncTask
该类,而是使用在 Visual Studio 生成的代理类中创建的异步方法。非常简单,但这是填充的代码ListView
- 属性是从演示者设置的
主持人
View 的类型为 IContactsView
protected override void OnCollectData(System.Collections.IEnumerable data, Type typeOfData)
{
if (data != null && typeOfData != null && typeOfData.Equals(typeof(UserContact)))
{
this.View.UserInformationCollection = data.Cast<UserContact>().ToArray();
}
}
活动
该活动实现了 IContactsView
public UserContact[] UserInformationCollection
{
get
{
return this._userInformationCollection;
}
set
{
this.RunOnUiThread(() =>
{
this._userInformationCollection = value;
ListView listview = this.FindViewById<ListView>(Resource.Id.userLV);
if (listview != null)
{
UserContact[] subsidiesList = this.GetIndexedContacts(this._userInformationCollection);
listview.Adapter = new ContactsAdapter(this, subsidiesList.ToList());
((ContactsAdapter)listview.Adapter).NotifyDataSetChanged();
}
});
}
}
[/更新]