Fragment中的ViewPager + Adapter => laggy swiping

met*_*e38 10 java android adapter android-fragments android-viewpager

我有ViewPager一些片段.每个片段都有一个ListViewa SlidingDrawer(在滑动前不可见)和一个ArrayAdapter.

适配器已启用onCreateView(),这会减慢滑动速度,因为每次刷卡时都必须加载30个列表项,因为正在创建新的片段.

我的问题是,是否可以在ViewPager闲置时滑动后设置适配器?或者,还有更好的方法?在展开SlidingDrawer时,需要已经加载List.

Cod*_*oid 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.
    }

}
Run Code Online (Sandbox Code Playgroud)

如果您花费几毫秒来加载作为viewpager补充的列表,那么它在UX方面确实没有给出糟糕的滑动体验......所以,想法是在加载之前在线程中等待400ms列出并确保当用户尝试快速滑动以查看viewpager内容时,您实际上不加载内容...


Luk*_*rog 3

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

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

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