0

当用户滚动到列表底部时,我正在尝试将项目添加到适配器。我能够做到这一点,但是我想将新项目添加到适配器并保留已经存在的项目,但现在原始项目已被删除,只有新项目可见。关于如何实现这一目标的任何想法?

这就是我的代码在 atm 的样子:

public void onScroll(AbsListView view, int firstVisibleItem,
        int visibleItemCount, int totalItemCount) {

        if (loading) {      
            if (totalItemCount > previousTotal) {
                previousTotal = totalItemCount;
                loading = false;
                previousTotal = totalItemCount;
                currentPage++;
            }
        }
        if (!loading
                && ((firstVisibleItem + visibleItemCount) >= totalItemCount)) {
            if (fragmentMode == 5) {
                ActiveUser.getInstance().FetchVidPage(currentPage, chanID,
                        activity, this);
                loading = true;
            }
        }
}

@Override
public void onTaskFinished() {
    titles.addAll(ActiveUser.getInstance().getWebVidInfo(1));
    thumbs.addAll(ActiveUser.getInstance().getWebVidInfo(2));
    data.addAll(ActiveUser.getInstance().getWebVidInfo(3));
    describtions.addAll(ActiveUser.getInstance().getWebVidInfo(4));
    vidOwnerIDs.addAll(ActiveUser.getInstance().getWebVidInfo(4));

    notifyDataSetChanged();

}

只是为了澄清我在做什么;一旦列表的底部可见,我就会启动一个获取更多视频的 AsyncTask。在异步任务中,我将适配器设置为异步任务完成后触发的事件的侦听器 - 这有效。

onTaskFinished() 上面的最后一个方法 - 这里我将新项目添加到 4 个列表中,适配器使用这些列表来填写每个列表项,最后我通知适配器。

所以新项目都添加得很好,问题是在添加新项目之前的项目,由于某种原因被删除,或者不再可见。

忘了补充一下,我已经验证列表的长度确实增加了,这意味着它确实包含原始数据和新添加的数据

有任何想法吗?

[编辑] 添加我将适配器设置到列表视图的代码

        adapter = new LazyAdapter(getActivity(), ActiveUser.getInstance()
                .getWebVidInfo(3),
                ActiveUser.getInstance().getWebVidInfo(1), ActiveUser.getInstance()
                        .getWebVidInfo(2),
                ActiveUser.getInstance().getWebVidInfo(5), ActiveUser.getInstance()
                        .getWebVidInfo(4), CHAN_ID, FRAGMENT_MODE);
        listing.setAdapter(adapter);
        listing.setOnScrollListener(adapter);
4

1 回答 1

1

回答我自己的问题。

原来问题是我对 notifyDataSetChanged() 的作用缺乏了解。它使用与最初创建时相同的构造函数参数调用正在重新创建的适配器。所以我将新项目添加到适配器内部列表没有任何效果。相反,我需要确保通过其构造函数解析到适配器的列表包含所有项目。

因此,虽然我之前的方法确实让适配器的内部列表包含新旧数据,但适配器的 totalItemCount 没有更新。

于 2012-03-21T09:13:32.403 回答