Fragment中的ViewPager + Adapter =>迟到的刷卡

时间:2013-05-20 07:46:22

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

我有ViewPager一些片段。每个片段在ListView(在滑动前不可见)与SlidingDrawer之间都有ArrayAdapter

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

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

2 个答案:

答案 0 :(得分: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方面确实没有给出糟糕的滑动体验......所以,想法是在线程中等待400ms在加载列表并确保在用户尝试快速滑动以查看viewpager内容时实际上不加载内容...

答案 1 :(得分:3)

  

我的问题是,滑动后可以设置适配器   当传呼机闲置时?

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

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