C# 消息系统,避免在listView中重复
我为我的android应用程序实现了一个消息传递系统。以下是它的工作原理:C# 消息系统,避免在listView中重复,c#,android,xamarin,polling,C#,Android,Xamarin,Polling,我为我的android应用程序实现了一个消息传递系统。以下是它的工作原理: 用户发送一条消息 将消息添加到数据库中,然后添加到listview适配器中 为了从其他用户那里获取消息,我实现了一个后台线程来“轮询”服务器。如果找到较旧的消息,如果该消息不在适配器中,则将其添加到listview适配器中 我面临的问题是,有时用户发送的消息会显示两次。我想我理解了这个问题:轮询将新添加的消息作为不在listview中的消息获取,并将其添加到listview适配器。有没有办法避免这种行为 下面是我检查
- 用户发送一条消息
- 将消息添加到数据库中,然后添加到listview适配器中
- 为了从其他用户那里获取消息,我实现了一个后台线程来“轮询”服务器。如果找到较旧的消息,如果该消息不在适配器中,则将其添加到listview适配器中
public class MessageListViewAdapter : BaseAdapter
{
List<Model.Message> messages = new List<Model.Message>();
Context context;
public MessageListViewAdapter(Context context,List<Model.Message> messages)
{
this.context = context;
this.messages = messages;
}
public void add(Model.Message message)
{
if (!messages.Contains(message))
{
this.messages.Add(message);
NotifyDataSetChanged(); // to render the list we need to notify
}
}
public override int Count =>messages.Count;
public override Java.Lang.Object GetItem(int position)
{
return null;
}
public override long GetItemId(int position)
{
return position;
}
公共类MessageListViewAdapter:BaseAdapter
{
列表消息=新列表();
语境;
public MessageListViewAdapter(上下文、列表消息)
{
this.context=上下文;
this.messages=消息;
}
公共无效添加(Model.Message)
{
如果(!messages.Contains(message))
{
this.messages.Add(message);
NotifyDataSetChanged();//要呈现我们需要通知的列表
}
}
public override int Count=>messages.Count;
public override Java.Lang.Object GetItem(int位置)
{
返回null;
}
公共覆盖长GetItemId(int位置)
{
返回位置;
}
如果您需要其他信息,请告诉我,可能我的解释不清楚或不够完整。
提前感谢,
Lio您应该做的是将listview与消息的存储区分开 您不应该将项目放入列表视图,而应该在数组中维护一个消息列表。键入消息时,可以将其添加到数组中,同时添加日期时间戳或GUID。轮询时,如果不存在条目,也可以将其添加到数组中。创建一个名为
AddItemToListView()
的方法或类似方法来执行此操作
然后将列表视图的填充保持为单独的-创建一个名为UpdateListView()
的方法,并在轮询、键入消息并添加消息后调用它
在AddItemToListView()中,您可以使用逻辑检查该项是否已在列表中,如果已在列表中,则不要添加该项。通过比较日期时间或GUID
我肯定会检查日期或GUID来比较消息,因为其他任何东西都不可靠,尤其是对象比较,这看起来像是您正在做的事情。您应该做的是将listview与消息的存储区分开
您不应该将项目放入列表视图,而应该在数组中维护一个消息列表。键入消息时,可以将其添加到数组中,同时添加日期时间戳或GUID。轮询时,如果不存在条目,也可以将其添加到数组中。创建一个名为AddItemToListView()
的方法或类似方法来执行此操作
然后将列表视图的填充保持为单独的-创建一个名为UpdateListView()
的方法,并在轮询、键入消息并添加消息后调用它
在AddItemToListView()中,您可以使用逻辑检查该项是否已在列表中,如果已在列表中,则不要添加该项。通过比较日期时间或GUID
我肯定会检查日期或GUID来比较消息,因为其他任何东西都不可靠,尤其是对象比较,这看起来像是您正在做的事情。谢谢,我会试试看!谢谢,我会试试看!