0

I've created a viewpager and three tabs. And I have two problems.

  1. after starting the activity inside that viewpager and tablayout, automatically selected first tab (normally) and second tab in getItem's method in my adapter and show first tab fragment!

  2. And when i selected third tab, the viewpager confront with problems. selected second tab and third tab, and third tab cant scrolled and ... . I do not understand about it!

Other information: - I used this library for scrolling in three fragments: com.github.ksoichiro:android-observablescrollview:1.5.0 - Activity inside that viewpager and tablayoutT implemented from ObservableScrollViewCallbacks and in each framgnets use this code for linking between activity parent and ObservableScrollView in each fragments: scrInfo.setScrollViewCallbacks((ObservableScrollViewCallbacks) parentActivity);

Create tabs:

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);

AdapterPager:

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);
  }
}

Third fragment:

public class FragmentInfo extends Fragment {

  private Activity parentActivity;

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    parentActivity = getActivity();

    View view = inflater.inflate(R.layout.fragment_info, container, false);

    ObservableScrollView scrInfo = (ObservableScrollView) view.findViewById(R.id.scrInfo);

    scrInfo.setScrollViewCallbacks((ObservableScrollViewCallbacks) parentActivity);

    return view;
  }
}

And animation for header scrolling in activity parent:

@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();
  }
Vahid
  • 1
  • 2

0 Answers0