1

私のアプリケーションでは、連絡先のリストを名前、写真、プレゼンス ステータスと共に表示します。アプリケーションは、連絡先がプレゼンスを変更するたびにイベントを受け取ります。私がやろうとしているのは、連絡先の新しいプレゼンスでリストを更新することです。

これは、リストをカスタム リスト アダプターにバインドする方法です。

 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()方法がわかりません...方法があることは知っていますが、それをどこでどのように使用するかはわかりません。

4

1 に答える 1

0

すべてのアイテムを更新しています

これは、新しいデータが利用可能になった後に NotifyDataSetChanged メソッドを使用するだけで実行できます。これにより、リストビューがトリガーされ、それ自体が完全に再描画されます。これを行うために、アダプターに新しい要求を行います。

1 アイテム内のコンテンツの更新

これを行う 1 つの方法は、現在どのビューがどのレコードに使用されているかを記録しておくことです。

明らかに、リストがスクロールするときにビューが再利用されることに注意する必要があります。

現在のビューとアイテムのマッピングを追跡している場合、現在のビューを毎回更新するのは比較的簡単です。

于 2013-02-19T22:24:25.147 に答える