添加新数据会使viewpage预加载的长度一样,当前页面数据正常添加,但是预加载的其他页面数据未更新会产生空白,如果滑动刷新又会导致卡顿推荐以下的方法,重写viewpage,然后在滑动的时候重新计算高度就行了
import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.LinearLayout;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.viewpager.widget.ViewPager;/*** Created by ZhengYu on /8/23.*/public class PersonalViewpager extends ViewPager {private int current;private int height = 0;private boolean scrollble = true;public PersonalViewpager(@NonNull Context context) {super(context);}public PersonalViewpager(@NonNull Context context, @Nullable AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {if (getChildCount() > current) {View child = getChildAt(current);child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));int measureHeight = child.getMeasuredHeight();height = measureHeight;}heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);super.onMeasure(widthMeasureSpec, heightMeasureSpec);}public void resetHeight(int current) {this.current = current;if (getChildCount() > current) {LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) getLayoutParams();if (layoutParams == null) {layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, height);} else {layoutParams.height = height;}setLayoutParams(layoutParams);}}@Overridepublic boolean onTouchEvent(MotionEvent ev){if (!scrollble){return true;}return super.onTouchEvent(ev); }public boolean isScrollble(){return scrollble;}public void setScrollble(boolean scrollble){this.scrollble=scrollble;}}/** 更新高度*/ viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {viewPager.resetHeight(position);}@Overridepublic void onPageScrollStateChanged(int state) {}});