我目前正在显示一个项目列表,供用户根据他们喜欢该项目的数量来投赞成票和反对票。

假设有 3 个不同的项目,任务 1、任务 2、任务 3,每个项目都有 0 票。当我对一个项目投赞成票时,我希望它高于另一项,如果我投反对票,则它低于另一项。我通过一个列表适配器和一个扩展 BaseAdapter 的自定义类让它完美地工作,我现在唯一的问题是,如果我在我自己的客户端上并且我对一个项目进行了投票,而另一个用户也在对一个项目进行投票,它将刷新我的列表,并且不会显示本地用户不再单击该项目,因此他们可以无限次投票。

我目前有 2 个 Arraylists,一个包含所有项目,一个只包含被点击的项目,以及它们是被赞成还是被反对。
我认为可能调用 .notifyDataSetChanged() 可以解决这个问题,但目前它不起作用。

我目前使用 GCM 向主机用户发送一条消息,说明他们是赞成票还是反对票,主要主持人赞成/反对该项目并将新列表发送给所有其他客户端。

如果需要查看任何代码,请询问,谢谢您的帮助。

最佳答案

您可以只发送相关条目和对它的操作,并允许接收方更新自己的数据库。

我认为这样做的正确方法是为每个任务创建一个对象。每个都有自己的 UID(我在示例中使用了一个数字,但它需要是唯一的,所以也许不同的方式更好)。

然后你对这些对象有几个操作,这些操作在本地发生并且需要发送到服务器,例如。

  • 添加新任务将发送到您的服务器
    { "data": {
        "uid": "1",
        "operation": "new"
        "task": "task1String"
    }
    

    接收方会将其添加到自己的数据库
  • 向上/向下投票的任务将发送到您的服务器
    { "data": {
        "uid": "1",
        "operation": "upvote" / "downvote"
    }
    

    这样接收方就会知道改变由 UID 1
  • 标识的任务的投票
  • ...

  • 希望能帮助到你。

    10-07 19:44
    查看更多