Android 拦截Tablayout 点击事件

背景:特定需求,点击某一个tab时,直接跳转到其他页面,不做任何选中操作,如下图点击小视频要跳转而不是选中这个tab

 

思考:Tablayout是安卓官方提供的,内部的点击事件都在内部封装,没有暴露类似的回调接口让用户自己处理某个tab的点击事件,

但是通过看源码发现 每一个tab的点击事件其实是一个内部封装的继承自LinearLayout的一个TabView来触发的

看1496行有个performClick方法,我们只要把这个方法拦截住,然后自己处理点击逻辑就可以了,这个方法里的this.tab.select()执行后你就会看到页面的上的tab选中了。

 

具体做法:这里只贴关键代码

TabLayout tl = findViewById(R.id.film_tl);
TabLayout.Tab tab = tl.newTab();
LinearLayout view = tab.view;
view.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
          //这里做你想做的事情 然后return true 就不在往下执行了
           return true;
      }
});
tl.addTab(tab.setText("小视频"));

如果Tablayout关联了ViewPager  那么对应的Tab 可以通过

tl.getTabAt(i) 来获取

收获:细心、耐心 问题总能找到突破口,之前考虑过自定义Tablayout ,但是最后发现 这么几行代码也可以解决问题,只有深入理解了问题的本质才可以更好的解决问题。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值