滚动嵌套viewpager,里面的fragment高度问题(已解决)

来源:互联网 发布:高分一号卫星数据价格 编辑:程序博客网 时间:2024/06/08 11:17

一:先自定义我们的viewpager

public class MyViewPager extends ViewPager{   private int current;   private int height = 0;   /**    * 保存position与对于的View    */   private HashMap<Integer, View> mChildrenViews = new LinkedHashMap<Integer, View>();   private boolean scrollble = true;   public MyViewPager(Context context) {      super(context);   }   public MyViewPager(Context context, AttributeSet attrs) {      super(context, attrs);   }   @Override   protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {      if (mChildrenViews.size() > current) {         View child = mChildrenViews.get(current);         child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));         height = child.getMeasuredHeight();      }      heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);      super.onMeasure(widthMeasureSpec, heightMeasureSpec);   }   public void resetHeight(int current) {      this.current = current;      if (mChildrenViews.size() > current) {         FrameLayout.LayoutParams layoutParams= (FrameLayout.LayoutParams) getLayoutParams();//       LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) getLayoutParams();         if (layoutParams == null) {            layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, height);         } else {            layoutParams.height = height;         }         setLayoutParams(layoutParams);      }   }   /**    * 保存position与对于的View    */   public void setObjectForPosition(View view, int position)   {      mChildrenViews.put(position, view);   }   @Override   public 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;   }}
二:请见我们的fragment

public class View_prodesc extends Fragment{    MyViewPager vpp;    View v;    public View_prodesc(MyViewPager vp) {        this.vpp = vp;    }    @Override    public View onCreateView(LayoutInflater inflater,                             ViewGroup container, Bundle savedInstanceState) {        v=inflater.inflate(R.layout.t_lin, null);        vpp.setObjectForPosition(v,0);        initView();        hosabout();        return v;    }

三:那么就剩下我们的Fragmentactivity了

   mViewPager.setAdapter(mAdapter);    //TabLayout的切换监听mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {    @Override    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {    }    @Override    public void onPageSelected(int position) {        mViewPager.resetHeight(position);        ((NestedScrollView) findViewById(R.id.item_detail_container)).scrollTo(0, 0);    }    @Override    public void onPageScrollStateChanged(int state) {    }});    mViewPager.resetHeight(0);}
聪明的你,我相信你一看便知,没错我用最简洁的语言记录了这个问题,详情请看代码

阅读全文
0 0
原创粉丝点击