立即加载所有expandablelistview项

时间:2014-08-15 18:15:00

标签: android android-viewpager xamarin xamarin.android expandablelistview

我有一个expandablelistview,由一个适配器支持,当用户向下滚动列表时,该适配器处理加载数据。在滚动时,它会动态调用适配器中的GetGroupView和GetChildView方法来加载即将进入视图的内容,这是默认行为。很直接的东西。

这个expandablelistview有一些行加载更加密集,特别是它有多个viewpage。由于设置和显示它们所需的UI工作,当它到达包含视图的行时,向下滚动屏幕会变得不连贯。但是,一旦用户滚动到屏幕底部,再次向上和向下滚动是快速而平滑的,因为行现在被缓存,因此不需要重新创建。

我想要做的是创建expandablelistview并绑定到适配器时,以某种方式强制它加载其所有行,而不仅仅是顶行。这样,当用户向下滚动屏幕时,就不会创建视图,因此滚动顺畅。我没有在expandablelistview或适配器上看到任何方法来实现这一点,怎么做呢?

1 个答案:

答案 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上的触摸,但这可能是一种过度杀伤: - )