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}.
* <p>
* 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
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Android自带Json库使用引发的问题
在Andriod系统应用层开发通常json协议解析使用Gson、jackson当然还公司的fastjson库等,Andriod其实也自带json解析库,集成的是apache的,在一些特定的场景用自带库解析也很方便。但是,不得不说自带库有个坑踩进去了就会被坑的挺惨,而且很难发现到问题; 一、背景 我们的项目部分模块在http请求时涉及到对参数key value计算出md5,通过json协议数据传输,到了服务端再做md5的校验,正常来说计算md5的规则双方都做了统一保证,满足了一致性的条件。理论上,只要通信过程数据未发生篡改,100%能保证是一致的;但是问题来了,即使中间的通信数据数据未被篡改,双方计算出来的md5还是存在不匹配的情形,而且出现的问题断断续续,一直没有得到有效定位和解决。 然而并没有想的那样100%md5计算相同 二、排查路径 2.1 分析现象 问题出现时会一直提示md5校验失败,说明两边的md5计算结果确实不一样,然而发生的概率很低,低到几乎可以忽略不计,但只要出现问题就能稳定复现。 2.2 定位问题 首先,很容易想到的是双方计算规则不同,计算的层级不同,毕竟Androi...
-
下一篇
android兼容huawei手机刘海屏解决方案
引用自华为官方文档:doc/50114 ,这里缩减了一些内容,捡取重要内容。 转载请标明出处: https://blog.csdn.net/djy1992/article/details/80683575 本文出自:【奥特曼超人的博客】 推荐: android 兼容所有刘海屏的方案大全 android 兼容huawei手机刘海屏解决方案 android 兼容vivo手机刘海屏解决方案 android兼容oppo手机刘海屏解决方案 android兼容小米xiaomi刘海屏解决方案 android 关于google刘海屏的解决方案 目录: 1. 背景 2. 华为已经发布的刘海屏手机信息 3. 华为刘海屏手机安卓O版本适配方案 4. 华为刘海屏API接口 5. 谷歌P版本刘海屏适配方案 6. UI适配 1. 背景 刘海屏指的是手机屏幕正上方由于追求极致边框而采用的一种手机解决方案。因形似刘海儿而得名。也有一些其他叫法:挖孔屏、凹口屏等,本文档统一按照刘海屏来命名。市场上已经有越来越多的手机都支持这种屏幕形式。 谷歌在安卓P版本中已经提供了统一的适配方案,可是在安卓O版本上如何适配呢?本文将详...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Crontab安装和使用
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker快速安装Oracle11G,搭建oracle11g学习环境

微信收款码
支付宝收款码