【问题标题】: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 上的触摸,但这可能有点过头了 :-)

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      相关资源
      最近更新 更多