私のアプリケーションでは、連絡先のリストを名前、写真、プレゼンス ステータスと共に表示します。アプリケーションは、連絡先がプレゼンスを変更するたびにイベントを受け取ります。私がやろうとしているのは、連絡先の新しいプレゼンスでリストを更新することです。
これは、リストをカスタム リスト アダプターにバインドする方法です。
ListView listView;
listView = FindViewById<ListView>(Resource.Id.List);
listView.Adapter = new ContactListAdapter(this, names);
これは私の ContactListAdapter の GetView の一部です
public override View GetView(int position, View convertView, ViewGroup parent)
{
var item = this.contacts.ElementAt(position);
var view = convertView; // re-use an existing view, if one is available
// if (view == null || !(convertView is LinearLayout)) // otherwise create a new one
view = context.LayoutInflater.Inflate(Resource.Layout.contactItemView, parent, false);
var p = context;
var imageItem = view.FindViewById(Resource.Id.presence) as ImageView;
string status = null;
foreach (CPresenceInfo pres in item.Presences)
{
if (pres.Type.ToString().Equals("TWS")) status = pres.StatusBusy;
}
if (status != null)
{
if (status.Equals("ONLINE")) imageItem.SetImageResource(Resource.Drawable.online);
if (status.Equals("BUSY")) imageItem.SetImageResource(Resource.Drawable.busy);
if (status.Equals("ABSENT")) imageItem.SetImageResource(Resource.Drawable.absent);
if (status.Equals("OFFLINE")) imageItem.SetImageResource(Resource.Drawable.offline);
}
return status;
return view;
}
// And the method that receives the event:
void CEventParser_OnPresenceChangedEvent(string personGuid, CPresenceInfo presence)
{
//Update the contact row or the entire list??
}
リストの 1 行だけを更新できるのか、それともリスト全体を更新する必要があるのかわかりません。しかし、どちらの場合も、NotifyDataSetChanged()
方法がわかりません...方法があることは知っていますが、それをどこでどのように使用するかはわかりません。