我有一个expandablelistview,由一个适配器支持,当用户向下滚动列表时,该适配器处理加载数据。在滚动时,它会动态调用适配器中的GetGroupView和GetChildView方法来加载即将进入视图的内容,这是默认行为。很直接的东西。
这个expandablelistview有一些行加载更加密集,特别是它有多个viewpage。由于设置和显示它们所需的UI工作,当它到达包含视图的行时,向下滚动屏幕会变得不连贯。但是,一旦用户滚动到屏幕底部,再次向上和向下滚动是快速而平滑的,因为行现在被缓存,因此不需要重新创建。
我想要做的是创建expandablelistview并绑定到适配器时,以某种方式强制它加载其所有行,而不仅仅是顶行。这样,当用户向下滚动屏幕时,就不会创建视图,因此滚动顺畅。我没有在expandablelistview或适配器上看到任何方法来实现这一点,怎么做呢?
答案 0 :(得分:0)
一个(也许不是太高效)的方式是滚动浏览用户背后的所有列表。这是一个例子:
// Show loading animation (like a progress dialog)
// Expand all groups
for (int i=0; i<mExpAdapter.getGroupCount(); i++) {
mExpList.expandGroup(i);
}
// Scroll to last child
mExpList.smoothScrollToPosition(mExpList.getCount());
mExpList.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView v, int firstVis, int visCount, int total) {
if (firstVis+visCount == total) {
// When the scrolling is done, collapse the groups
for (int i=0; i<mExpAdapter.getGroupCount(); i++) {
mExpList.collapseGroup(i);
}
// Scroll to the 1st item
mExpList.setSelectedGroup(0);
// Remove the scroll listener
mExpList.setOnScrollListener(null);
// Hide the loading animation
}
}
});
请注意,smoothScrollToPosition
有点慢,您可能想要使用其他方法滚动,甚至使用dispatchTouchEvent
模仿ExpListView上的触摸,但这可能是一种过度杀伤: - )