背景:特定需求,点击某一个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 ,但是最后发现 这么几行代码也可以解决问题,只有深入理解了问题的本质才可以更好的解决问题。