11

我有ViewPager一些片段。每个片段都有一个ListViewin a SlidingDrawer(=在刷卡之前不可见)和一个ArrayAdapter.

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

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

4

2 回答 2

16

我有一个类似的问题......我使用了听众。尽管如此,当您背靠背滑动两页时,它还是很迟钝……我做了这样的事情来改善体验……

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 内容时您实际上不加载内容...

于 2013-10-15T02:31:38.393 回答
3

我的问题是,当寻呼机空闲时,是否可以在刷卡后设置适配器?

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

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

于 2013-05-20T08:36:40.840 回答