我为我的android应用程序实现了一个消息系统。下面是它的工作原理 :
我面临的问题是,有时用户发送的消息会显示两次。我认为我理解了这个问题:轮询获取列表视图中尚未添加的新消息并将其添加到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;
}
如果您需要其他信息,请告诉我,也许我的解释不清楚或不够完整。提前致谢,
LIO
您应该做的是将列表视图与消息的存储分开。
您应该维护数组中的消息列表,而不是将项目放入列表视图中。键入消息时,可以将其与日期时间戳或GUID一起添加到阵列中。轮询时,如果数组不存在,还会向数组添加条目。创建一个名为AddItemToListView()
或类似的方法来执行此操作
然后将列表视图的填充分开 - 创建一个名为UpdateListView()
的方法,并在轮询后调用它并在键入消息并添加它之后调用它。
在AddItemToListView()
内部,你可以输入逻辑来检查项目是否已经在列表中,如果是,则不要添加它。通过比较日期时间或GUID。
我肯定会检查Date或GUID来比较消息,因为其他任何东西都不可靠,尤其是对象比较,这就是你正在做的事情。