【问题标题】:ViewPager + Adapter in Fragment => laggy swiping片段中的 ViewPager + 适配器 => 延迟滑动
【发布时间】:2013-05-20 07:46:21
【问题描述】:

我有一个带有一些片段的ViewPager。每个片段在SlidingDrawer 中都有一个ListView(=在滑动前不可见)和ArrayAdapter

适配器设置在onCreateView() 上,这会减慢滑动速度,因为每次滑动时都必须加载 30 个列表项,因为正在创建新片段。

我的问题是,当ViewPager空闲时,是否可以在刷卡后设置适配器?或者,还有更好的方法?当 SlidingDrawer 展开时,列表需要已经加载。

【问题讨论】:

    标签: java android android-fragments android-viewpager adapter


    【解决方案1】:

    我遇到了类似的问题...我使用了侦听器。不过,当您背靠背滑动两页时,它还是很迟钝……我做了这样的事情来改善体验……

    viewpager.setOnPageChangeListener(new OnPageChangeListener() {
        int positionCurrent;
        boolean dontLoadList;
        @Override
        public void onPageScrollStateChanged(int state) {   
            if(state == 0){ // the viewpager is idle as swipping ended
                    new Handler().postDelayed(new Runnable() {
                        public void run() {
                            if(!dontLoadList){
                            //async thread code to execute loading the list... 
                            }
                        }
                    },200);
                }
            }
        }
    
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            positionCurrent = position; 
            if( positionOffset == 0 && positionOffsetPixels == 0 ) // the offset is zero when the swiping ends{
                dontLoadList = false;
            }
            else
                dontLoadList = true; // To avoid loading content for list after swiping the pager.
        }
    
    }
    

    如果您需要几毫秒来加载作为 viewpager 补充的列表,那么就 UX 而言它是可以的,而不是提供糟糕的滑动体验......所以,这个想法是在线程中等待 400 毫秒在加载列表并确保在用户尝试快速滑动以查看 viewpager 内容时实际上不加载内容...

    【讨论】:

      【解决方案2】:

      我的问题是,是否可以在刷卡后设置适配器 Pager 什么时候空闲?

      您可以在ViewPager 上设置OnPageChangeListener 来监控滑动手势。然后,您可以使用onPageSelected()(或onPageScrollStateChanged() 监控当前状态)方法在选择新页面时获得通知,并从该方法开始加载数据。

      另外,请确保 ListView 对延迟负责,而不是代码的其他部分。

      【讨论】:

      • 我评论了 setAdapter 调用,它更流畅。 onPageSelected 是个好主意,但我只得到位置编号,如何获取 Fragment 的当前实例
      • @metinkale38 这取决于你使用什么类型的适配器,看这个问题的前两个答案stackoverflow.com/questions/7379165/…
      • 谢谢 OnPageChangeListener 是个好主意,它比以前更流畅,如果我不立即滑动 2 个页面。在您的链接上,我找到了这个链接:tamsler.blogspot.nl/2011/11/…,我使用第二种方法来获取 Fragment 实例
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多