Android viewpager选择了两个选项卡(疯狂)

Android viewpager选择了两个选项卡(疯狂),android,android-viewpager,android-tablayout,Android,Android Viewpager,Android Tablayout,我创建了一个viewpager和三个选项卡。 我有两个问题 在viewpager和TableLayout中启动活动后,在我的适配器中自动选择getItem方法中的第一个选项卡(通常)和第二个选项卡,并显示第一个选项卡片段 当我选择第三个选项卡时,viewpager遇到了问题。已选择的第二个选项卡和第三个选项卡,以及第三个选项卡不能滚动和。我不明白 其他资料: -我使用这个库在三个片段中滚动: ksoichiro:android observablescrollview:1.5.0 -从Obser

我创建了一个viewpager和三个选项卡。 我有两个问题

  • 在viewpager和TableLayout中启动活动后,在我的适配器中自动选择getItem方法中的第一个选项卡(通常)和第二个选项卡,并显示第一个选项卡片段

  • 当我选择第三个选项卡时,viewpager遇到了问题。已选择的第二个选项卡和第三个选项卡,以及第三个选项卡不能滚动和。我不明白

  • 其他资料: -我使用这个库在三个片段中滚动: ksoichiro:android observablescrollview:1.5.0 -从ObservableScrollViewCallbacks实现的viewpager和TableLayoutt中的活动 在每个FramNets中,使用此代码链接每个片段中的活动父级和ObservableScrollView: scrInfo.setScrollViewCallbacks((ObservableScrollViewCallbacks)parentActivity)

    创建选项卡:

    AdapterPager adapter = new AdapterPager(getSupportFragmentManager());
    adapter.myAddFragment(new FragmentComment());
    adapter.myAddFragment(new FragmentProduct());
    adapter.myAddFragment(new FragmentInfo());
    vpgCampPage.setAdapter(adapter);
    tabCampPage.setupWithViewPager(vpgCampPage);
    tabCampPage.getTabAt(0).setIcon(R.mipmap.info_message);
    tabCampPage.getTabAt(1).setIcon(R.mipmap.info_product);
    tabCampPage.getTabAt(2).setIcon(R.mipmap.info_desc);
    
    适配器管理器:

    public class AdapterPager extends FragmentPagerAdapter {
    
      private List<Fragment> fragments = new ArrayList<>();
    
      public AdapterPager(FragmentManager fm) {
        super(fm);
      }
    
      @Override
      public Fragment getItem(int position) {
        return fragments.get(position);
      }
    
      @Override
      public int getCount() {
        return fragments.size();
      }
    
      public void myAddFragment(Fragment fragment) {
        fragments.add(fragment);
      }
    }
    
    和活动父级中标题滚动的动画:

    @Override
      public void onUpOrCancelMotionEvent(ScrollState scrollState) {
        if (scrollState == ScrollState.UP) {
          if (toolbarIsShown()) { // TODO Not implemented
            hideToolbar(); // TODO Not implemented
          }
        } else if (scrollState == ScrollState.DOWN) {
          if (toolbarIsHidden()) { // TODO Not implemented
            showToolbar(); // TODO Not implemented
          }
        }
      }
    
      private boolean toolbarIsShown() {
        return ViewHelper.getTranslationY(layCampPageHeader) == 0;
      }
    
      private boolean toolbarIsHidden() {
        return ViewHelper.getTranslationY(layCampPageHeader) - sizeTab == -layCampPageHeader.getHeight();
      }
    
      private void showToolbar() {
        moveToolbar(0);
      }
    
      private void hideToolbar() {
        moveToolbar(-layCampPageHeader.getHeight() + sizeTab);
      }
    
      private void moveToolbar(float toTranslationY) {
        ValueAnimator animator = ValueAnimator.ofFloat(ViewHelper.getTranslationY(layCampPageHeader), toTranslationY).setDuration(300);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
          @Override
          public void onAnimationUpdate(ValueAnimator animation) {
            float translationY = (float) animation.getAnimatedValue();
            ViewHelper.setTranslationY(layCampPageHeader, translationY);
            ViewHelper.setTranslationY((View) vpgCampPage, translationY);
            FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) ((View) vpgCampPage).getLayoutParams();
            lp.height = (int) -translationY + /*getScreenHeight()*/1776 - lp.topMargin;
            ((View) vpgCampPage).requestLayout();
          }
        });
        animator.start();
      }
    

    什么是
    vpgCampPage
    ?这是我的viewpager的名称。目前我删除了此库,并且不使用它。
    AllFragments.ViewPagerAdapter适配器=新建AllFragments.ViewPagerAdapter(getFragmentManager())
    然后将其添加到末尾
    vpgCampPage.setAdapter(adapter);选项卡CampPage.setupWithViewPager(vpgCampPage)@Override
      public void onUpOrCancelMotionEvent(ScrollState scrollState) {
        if (scrollState == ScrollState.UP) {
          if (toolbarIsShown()) { // TODO Not implemented
            hideToolbar(); // TODO Not implemented
          }
        } else if (scrollState == ScrollState.DOWN) {
          if (toolbarIsHidden()) { // TODO Not implemented
            showToolbar(); // TODO Not implemented
          }
        }
      }
    
      private boolean toolbarIsShown() {
        return ViewHelper.getTranslationY(layCampPageHeader) == 0;
      }
    
      private boolean toolbarIsHidden() {
        return ViewHelper.getTranslationY(layCampPageHeader) - sizeTab == -layCampPageHeader.getHeight();
      }
    
      private void showToolbar() {
        moveToolbar(0);
      }
    
      private void hideToolbar() {
        moveToolbar(-layCampPageHeader.getHeight() + sizeTab);
      }
    
      private void moveToolbar(float toTranslationY) {
        ValueAnimator animator = ValueAnimator.ofFloat(ViewHelper.getTranslationY(layCampPageHeader), toTranslationY).setDuration(300);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
          @Override
          public void onAnimationUpdate(ValueAnimator animation) {
            float translationY = (float) animation.getAnimatedValue();
            ViewHelper.setTranslationY(layCampPageHeader, translationY);
            ViewHelper.setTranslationY((View) vpgCampPage, translationY);
            FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) ((View) vpgCampPage).getLayoutParams();
            lp.height = (int) -translationY + /*getScreenHeight()*/1776 - lp.topMargin;
            ((View) vpgCampPage).requestLayout();
          }
        });
        animator.start();
      }