I've created a viewpager and three tabs. And I have two problems.
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!
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();
}