2

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

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

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

这是它的工作原理:

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

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

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

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

谢谢 !

4

2 回答 2

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);
于 2015-03-27T17:27:20.320 回答
0

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

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

于 2015-03-05T11:29:03.653 回答