【问题标题】:Load all expandablelistview items immediately立即加载所有可扩展列表视图项
【发布时间】:2014-10-09 12:14:08
【问题描述】:
我有一个可扩展列表视图,它由一个适配器支持,该适配器在用户向下滚动列表时处理加载数据。当它滚动时,它会动态调用适配器中的 GetGroupView 和 GetChildView 方法来加载即将出现的内容,这是默认行为。非常直接的东西。
这个可扩展列表视图有一些需要更密集加载的行,特别是它有多个视图分页器。由于设置和显示它们所需的 UI 工作,当它到达包含 viewpagers 的行时,向下滚动屏幕会变得不稳定。但是,一旦用户滚动到屏幕底部,再次向上和向下滚动会快速而流畅,因为行现在已缓存,因此无需重新创建。
我想做的是在创建可扩展列表视图并将其绑定到适配器时,以某种方式强制它加载所有行,而不仅仅是顶部行。这样,当用户向下滚动屏幕时,就不会创建视图,因此滚动很流畅。我在 expandablelistview 或适配器上没有看到任何方法来完成这个,怎么做?
【问题讨论】:
标签:
android
android-viewpager
xamarin
xamarin.android
expandablelistview
【解决方案1】:
嗯,一种(也许不是太有效)的方法是滚动浏览用户背后的所有列表。这是一个例子:
// 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 上的触摸,但这可能有点过头了 :-)