我有一个包含事件列表的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()不会减少。

最佳答案

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

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

09-10 13:20