私は私の奇妙な/ユニークな状況を持っていListView
ます。これがシナリオです:
MVPデザインパターンを利用しています。開始時に、Activity
Webサービスからデータをフェッチするようにプレゼンターに通知するイベントを発生させます。Webサービス呼び出しは非同期呼び出しです。Webサービスイベントが発生したら、結果を取得して、 /Completed
内にあるプロパティ(配列型)にプッシュします。View
Activity
私が言及したことはすべてうまく機能しますが、デバイスが回転するとすぐに、いくつかの興味深い開発が行われます。
非同期呼び出しは通常どおり再開され、プロパティ(Array)に値を提供します。したがって、そこには何も問題はありません...(そして、コレクションにデータがあります)次に、を設定しListView Adapter
て呼び出しますがnotifyDataSetChanged
、何も起こりません。UIが更新されていないか?? 再入力するとActivity
、データが再び表示されますか?
私も電話invalidateViews
をかけてみinvalidate
ましたListView
-これは何もしませんでした。
誰かがこの問題で私を助けてくれませんか?よろしくお願いします!
[アップデート]
私はJavaではなくC#(Xamarin)を使用しているという事実を強調したいと思います(:sigh:-はい、わかっています)。さらに、私はASyncTask
クラスを利用していません。代わりに、VisualStudioによって生成されたプロキシクラス内で作成された非同期メソッドを利用しています。非常に簡単ですが、これはデータを入力するコードですListView
-プロパティはプレゼンターから設定されます
プレゼンター
ビューのタイプが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();
}
});
}
}
[/アップデート]