android tab 点击,TabLayout.Tab点击事件
1,大家都知道 android.support.design.widget.TabLayout 中的TabLayout并没有点击事件 只有addOnTabSelectedListener这个选中监听,今天遇到个问题,就是和照片墙组合使用,点击tab照片墙要滑动到相应的位置,滑动照片墙 要选中相应的tab ,用addOnTabSelectedListener这个监听的话 两边互相影响,就出问题了 ,
1,大家都知道 android.support.design.widget.TabLayout 中的TabLayout并没有点击事件 只有addOnTabSelectedListener这个选中监听,今天遇到个问题,就是和照片墙组合使用,点击tab照片墙要滑动到相应的位置,滑动照片墙 要选中相应的tab ,用addOnTabSelectedListener这个监听的话 两边互相影响,就出问题了 ,然后就想到,给Tab添加点击事件,下面就是具体实现:
2,代码
for (int i = 0; i
TabLayout.Tab tab = tabLayout.getTabAt(i);
if (tab == null) return;
//这里使用到反射,拿到Tab对象后获取Class
Class c = tab.getClass();
try {
//Filed “字段、属性”的意思,c.getDeclaredField 获取私有属性。
//"mView"是Tab的私有属性名称(可查看TabLayout源码),类型是 TabView,TabLayout私有内部类。
Field field = c.getDeclaredField("mView");
//值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。
//如果不这样会报如下错误
// java.lang.IllegalAccessException:
//Class com.test.accessible.Main
//can not access
//a member of class com.test.accessible.AccessibleTest
//with modifiers "private"
field.setAccessible(true);
final View view = (View) field.get(tab);
if (view == null) return;
view.setTag(i);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = (int) view.getTag();
//这里就可以根据业务需求处理点击事件了。
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
更多推荐
所有评论(0)