我有一个包含事件列表的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();
但问题是我总是有eventList.size()= 20和principalSchedule.getCount()不会减少。
答案 0 :(得分:1)
List&lt; E&gt; #subList(int,int)方法返回一个新的List&lt; E&gt;使用初始List的子集,不会更改原始List。
如果您没有将eventList设置回principalSchedule,则来自prin的列表
答案 1 :(得分:0)
您的ListView应该通过ViewAdapter与您的列表进行交互(可能是一个ArrayAdapter,但您没有显示该代码)如果您创建自己的Adapter(不是很难做),那么该适配器上的getView()方法将能够确定项目何时不再可见并可能回收资源。
此链接:http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/详细介绍了一种适配器的技术,该适配器在后台线程中加载资源,并且可以在不再需要资源时释放资源。它与您的用例不完全匹配,但如果您阅读并理解它,您应该看到如何编写您的案例所需的代码。