Android 拦截Tablayout 点击事件

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

Android 拦截Tablayout 点击事件_第1张图片

 

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

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

Android 拦截Tablayout 点击事件_第2张图片

Android 拦截Tablayout 点击事件_第3张图片

看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 ,但是最后发现 这么几行代码也可以解决问题,只有深入理解了问题的本质才可以更好的解决问题。

你可能感兴趣的:(Android,总结类)