Android GCM / Listview更新

时间:2016-03-22 05:38:42

标签: android listview

我目前正在显示用户根据他们喜欢该项目的数量进行投票和投票的项目列表。

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

我目前有2个Arraylists,一个包含所有项目,另一个只包含点击的项目以及是否被投票或投票。 我想可能会调用.notifyDataSetChanged()来解决问题,但目前它还没有工作。

我目前使用GCM向主机用户发送一条消息,说明他们是upvote或downvote,主要主机upvotes / downvotes该项目并将新列表发送给所有其他客户。

如果需要任何代码才能看到,请感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您只能发送相关条目及其上的操作,并允许接收方更新自己的数据库。

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

然后,您对这些对象进行了多次操作,这些操作发生在本地,需要发送到服务器,例如。

  • 添加新任务将发送到您的服务器

    { "data": {
        "uid": "1",
        "operation": "new"
        "task": "task1String"
    }
    

    并且接收方会将其添加到自己的数据库

  • 向上/向下投票任务将发送到您的服务器

    { "data": {
        "uid": "1",
        "operation": "upvote" / "downvote"
    }
    

    这样接收方就知道要更改UID 1识别的任务的投票

  • ...

希望它有所帮助。