Android自定义TabLayout后ViewPager与TabLayout互相控制切换
正常的Android原生TabLayout与ViewPager搭配使用,当TabLayout调用setupWithViewPager与ViewPager互相捆绑以后,就实现了原生的TabLayout与ViewPager的互相控制。
但是,当自定义TabLayout后,由于setupWithViewPager本身会将删掉所有TabLayout的子View,那么自定义的View就会失效,因此自定义TabLayout后,就无法再使用setupWithViewPager实现TabLayout与ViewPager的双向互相控制了。详情见附录文章1。
一些材料说可以在ViewPager里面添加OnPageChangeListener,然后在OnPageChangeListener的onPageScrolled里面使用TabLayout的setScrollPosition方法,在ViewPager中控制TabLayout的切换,貌似无效。TabLayout的源代码也指出了setScrollPosition并不会更新选中Tab的UI:
 /**     * Set the scroll position of the tabs. This is useful for when the tabs are being displayed as     * part of a scrolling container such as {@link android.support.v4.view.ViewPager}.     * 

* Calling this method does not update the selected tab, it is only used for drawing purposes. * * @param position current scroll position * @param positionOffset Value from [0, 1) indicating the offset from {@code position}. * @param updateSelectedText Whether to update the text's selected state. */ public void setScrollPosition(int position, float positionOffset, boolean updateSelectedText) { setScrollPosition(position, positionOffset, updateSelectedText, true); }


经过研究TabLayout的源代码最终发现,当自定义TabLayout后,如果仍然希望自定义的TabLayout与ViewPager双向互相控制,可以用下面的方式实现:
        mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));        mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {            @Override            public void onTabSelected(TabLayout.Tab tab) {                mViewPager.setCurrentItem(tab.getPosition());            }            @Override            public void onTabUnselected(TabLayout.Tab tab) {            }            @Override            public void onTabReselected(TabLayout.Tab tab) {            }        });

附:
1,《Android TabLayout定制CustomView与ViewPager交互双向联动》链接:https://blog.csdn.net/zhangphil/article/details/48934039 

更多相关文章

  1. Android 的 dex2jar 和 jd-gui 反编译 apk 源代码
  2. repo sync同步Android 源代码下载到99%出错
  3. cygwin获取android源代码
  4. Android SDK编译 ——如何将自己源代码加入android.jar
  5. Android之图文混排 (二)源代码
  6. [CSDN]Android应用程序进程启动过程的源代码分析

随机推荐

  1. android 考研appwidget的实现
  2. Android(安卓)App常用图标尺寸规范
  3. Android(安卓)shell 系统命令大全
  4. android:hintText与android:inputType详
  5. 安装好android的adt以后重启eclipse,但是
  6. Android(安卓)内存数据库
  7. 使用 Eclipse PhoneGap 构建 Android(安
  8. android Notification 的使用
  9. Android设置透明、半透明等效果
  10. Android五大布局和ConstraintLayout