Android Parse.com与parseQueryAdapter聊天不刷新

时间:2015-02-17 17:26:43

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

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

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

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

这是它的工作原理:

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

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

以下是更多解释 问题来自适配器生命周期。我有:

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

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

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