在我的应用程序中,我显示了一个联系人列表以及他们的姓名、照片和在线状态。每次联系人更改其状态时,应用程序都会收到一个事件,而我要做的是使用联系人的新状态更新列表。
这就是我将列表绑定到自定义列表适配器的方式:
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??
}
我不知道我是否可以只更新列表中的一行,或者我是否必须更新整个列表。但在这两种情况下我都不知道该怎么做......我知道有一种NotifyDataSetChanged()
方法,但我不知道如何以及在哪里使用它。