0

我有一个包含事件列表的 ListView,当我滚动列表时,我会加载更多项目,并且我的屏幕上始终没有超过 20 个事件可见。所以我这样进行:

    //load data from server and add it to my eventsList
    int size = eventsList.size();
    List<Data> temp;
    if(size>20) {
        eventsList = eventsList.subList(size - 20, size);
    }

    Log.e("eventsList Load More", " " + eventsList.size() + " " + principalSchedule.getCount());

    //Tell to the adapter that changes have been made, this will cause the list to refresh
    principalSchedule.notifyDataSetChanged();

但问题我总是有 eventsList.size() = 20 并且 principalSchedule.getCount() 并没有减少。

4

2 回答 2

1

List<E>#subList(int, int) 方法返回一个带有初始 List 子集的新 List<E>,并且不会更改原始 List。

如果您没有将 eventList 设置回 principalSchedule,则来自 prin 的 List

于 2013-08-16T14:19:58.763 回答
0

您的 ListView 应该通过 ViewAdapter 与您的列表进行交互(可能是 ArrayAdapter 但您没有显示该代码)如果您创建自己的适配器(不是很难做到),那么该适配器上的 getView() 方法将能够确定项目何时不再可见并可能回收资源。

此链接:http ://lucasr.org/2012/04/05/performance-tips-for-androids-listview/ 更详细地介绍了一种适配器技术,该技术在后台线程中加载资源并可以在何时释放资源不再需要它们。它与您的用例不完全匹配,但如果您阅读并理解它,您应该了解如何编写您的案例所需的代码。

于 2013-08-16T14:29:33.813 回答