ViewPager每次notifyDataSetChanged之后,所设置的PageTransformer显示就出问题?

第一次setPageTransformer之后可以正常使用,但是当notifyDataSetChanged之后,其显示就有问题。但是只要viewpager一滑动,PageTransformer的效果就有了。
正常情况下我设置的PageTransformer是这样的,两边没有显示的比较小,而当前位置的显示大:

clipboard.png
但是当notifyDataSetChanged之后,显示效果成这个样子了:

clipboard.png

不过只要有滑动,显示效果又没问题了。

这是个什么情况,要如何notifyDataSetChanged之后就可以显示PageTransformer的效果?
下面是我的PageTransformer的代码

public class ScalePageTransformer implements ViewPager.PageTransformer {

    public static final float MAX_SCALE = 1.2f;
    public static final float MIN_SCALE = 0.6f;

    @Override
    public void transformPage(View page, float position) {

        if (position < -1) {
            position = -1;
        } else if (position > 1) {
            position = 1;
        }

        float tempScale = position < 0 ? 1 + position : 1 - position;

        float slope = (MAX_SCALE - MIN_SCALE) / 1;
        //一个公式
        float scaleValue = MIN_SCALE + tempScale * slope;
        page.setScaleX(scaleValue);
        page.setScaleY(scaleValue);
        
    }
}

数据每一分钟 轮询一次,然后我获取到我要更新的数据点,然后适配器刷新,就出现上面出现的场景

以下是我适配器 getItemPosition 方法 逻辑,我只刷新当前viewpager所在位置的内容
@Override

public int getItemPosition(Object object) {
    View view = (View) object;
    int currentPage = ((TempControllerSettingAct) mContext).viewPagerPosition;
    if (currentPage == (Integer) view.getTag()) {
        return POSITION_NONE;
    } else {
        return POSITION_UNCHANGED;
    }
}
阅读 3k
1 个回答

修改适配器的写法,覆盖getItemPosition()方法,当调用notifyDataSetChanged时,让getItemPosition方法人为的返回POSITION_NONE,从而达到强迫viewpager重绘所有item的目的。

具体代码如下:

class SearchAdapter extends PagerAdapter {


 private int mChildCount = 0;

 @Override
 public void notifyDataSetChanged() {         
       mChildCount = getCount();
       super.notifyDataSetChanged();
 }

 @Override
 public int getItemPosition(Object object)   {          
       if ( mChildCount > 0) {
       mChildCount --;
       return POSITION_NONE;
       }
       return super.getItemPosition(object);
 }

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题