【问题标题】:Android Parse.com Chat with parseQueryAdapter does not refreshAndroid Parse.com 与 parseQueryAdapter 聊天不刷新
【发布时间】:2015-02-17 17:26:42
【问题描述】:

我正在尝试使用 Parse.com 在我的 Android 应用中添加聊天功能。 我正在使用自定义 parseQueryAdapter。 问题是当我发送消息或收到新消息时,我的适配器没有更新。我尝试添加两者

adapter.notifyDataSetInvalidated();
adapter.clear();
adapter.loadObjects();
adapter.notifyDataSetChanged();

在完成回调中,甚至在专用的刷新按钮中。

这就是它的工作原理:

  • 我的适配器设置为自定义 listView,并且在适配器的构造函数中设置了查询
  • 当我发送消息时,我会创建一个新的 ParseObject(我的数据库中的消息)并将其保存到对话 ParseObject。
  • 我保存消息,然后我保存对话,同时使用 saveInBackground(new SaveCallback() {...})saveEventually(new SaveCallback() {...} )
  • 我尝试在 done 回调中刷新

每次listView显示相同的消息,我必须回到上一个片段并重新打开聊天片段才能看到新消息...

我注意到 getCount() 方法总是返回显示的内容。

知道如何刷新 listView 的数据吗?

谢谢!

【问题讨论】:

  • 我也有类似的问题,如果你找到了解决办法,请在下方留言。谢谢!

标签: android listview android-listview parse-platform android-parsequeryadapter


【解决方案1】:

问题是我在 parseQueryAdapter 的构造函数中获取了对话中的消息列表,然后返回查询。 parseQueryAdapter 运行良好,向我显示查询结果。如果我在对话中发送消息,它对构造函数中的列表没有影响......

所以我在我的消息 ParseObject 中添加了一个列,并执行一个简单的 whereEqualTo() 以获得正确的消息。现在完美运行!

【讨论】:

  • 你好,我也有同样的问题,你能更好地解释一下(也许有一个例子)你是如何解决的吗?谢谢
【解决方案2】:

这里还有一些解释 问题来自适配器生命周期。我有:

constructor {
  set up the messages list
  set this list as source of data in query
  ...
}

当我尝试刷新时,数据已更新,但列表仍然相同,所以我得到了相同的结果! 由于无法更改现有 parseQueryAdapter 的查询,因此我完全改变了获取消息的方式,在我的 parse 对象中使用对话指针。现在它只是一个简单的解析查询适配器:

ParseQuery<ParseObject> q = new ParseQuery<ParseObject>("Message");
q.whereEqualTo("conversationPointer", parseConversationId);

【讨论】:

  • 所以...我不应该使用 ParseQueryAdapter 吗?
  • 你应该使用它,因为它非常方便。您可以轻松进行分页,为您的数据更新......使用它的唯一条件是您可以通过简单的查询获得您必须显示的内容。 ParseQueryAdapter 是将查询结果显示为列表的好方法。
猜你喜欢
  • 1970-01-01
  • 2015-04-27
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多