Android ParseQueryAdapter的notifyDataSetChanged不起作用。

4

使用最新的 Parse 库 v1.5.1

由于此更新,现在我可以进行以下操作:

ParseQueryAdapter<ParseObject> mAdapter = new ParseQueryAdapter<ParseObject>(MainActivity.this, new ParseQueryAdapter.QueryFactory<ParseObject>() {
    @Override
    public ParseQuery<ParseObject> create() {

        ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(ParseObject.class);
        query.fromLocalDatastore();

        return query;
    }
});
mListView.setAdapter(mAdapter);

现在我有一些固定的对象,它们显示正确,但是当我这样取消固定它们时:
//Some ParseObject in the above adapter
object.unpinInBackground(new DeleteCallback() {
    @Override
    public void done(ParseException e) {
        if(e == null) {
            //I beleive this would be the correct approach.
            mAdapter.notifyDataSetChanged();
        }
    }
});

当我取消固定某个项目时,希望它从相应的ListView中消失,但事实并非如此。但是,假设我返回到另一个活动并重新访问此活动,则ListView将正确显示,而不包括最近取消固定的对象。

这是一个错误吗?如果不是,我做错了什么?

2个回答

2

我有同样的问题,我通过调用ParseQueryAdapter.loadObjects()方法解决了它。


0

在调用notifyDataSetChanged();之前,您可以尝试使用mAdapter.remove(object)

unpinInBackground会从数据库中删除对象。可能适配器有该对象的本地副本。

看起来ParseQueryAdapter中没有remove方法。

这是官方来源的回复:

由于ParseQueryAdapter旨在始终显示ParseQuery的结果,因此您需要使用API请求重新加载查询。

https://www.parse.com/questions/delete-a-object-using-parsequeryadapter


2
好的,我需要使用 loadObjects() 来重新运行查询。 - janakagamini
那么您可能想接受我的答案,或者编写您自己的答案并接受它(以标记问题已得到解答)。 :) - LordRaydenMK
我并不完全相信这是100%正确的,比如说如果我在第二页查看一个项目,并取消固定它,当我调用loadObjects()时,listView会再次从顶部显示,导致奇怪的用户体验。 - janakagamini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接