我有ViewPager
一些片段。每个片段在ListView
(在滑动前不可见)与SlidingDrawer
之间都有ArrayAdapter
。
适配器设置在onCreateView()
上,这会减慢滑动速度,因为每次刷卡都需要加载30个列表项,因为正在创建新的片段。
我的问题是,当ViewPager
空闲时,是否可以在刷卡后设置适配器?或者,还有更好的方法?在展开SlidingDrawer时,需要已经加载List。
答案 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
对延迟负责,而不是代码的其他部分。