tablayout设置点击事件

//tablayout点击事件
for (int i = 0; i < tablayout.getTabCount(); i++) {
    TabLayout.Tab tab = mtab_record.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();
                //这里就可以根据业务需求处理点击事件了。
                ToastUtils.showLongToast(MaintenanceRecordActivity.this,"点击了"+position);
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
    }
}

猜你喜欢

转载自blog.csdn.net/Liu_ser/article/details/83826970