TabLayout.Tab(自定义)点击事件

TabLayout是官方design包中的一个布局控件,这里不介绍它的基本使用,只是解决Tab(自定义)点击事件。


 1 //获取Tab的数量
 2 
 3 Int tabCount = tabLayout.getTabCount();  
 4 
 5 for(int i = 0 ; i < tabCount; i++){
 6 
 7 TabLayout.Tab tab = tabLayout.getTabAt(i);
 8 
 9 if(tab == null){
10 
11 continue;
12 
13 }
14 
15 //这里使用到反射,拿到Tab对象后获取Class
16 
17 Class c = tab.getClass();
18 
19 try{
20 
21  //c.getDeclaredField 获取私有属性。
22 
23 //“mView”是Tab的私有属性名称,类型是 TabView ,TabLayout私有内部类。
24 
25 Field field = c.getDeclaredField("mView");
26 
27 if(field ==null) {
28 
29 continue;
30 
31 }
32 
33 field.setAccessible(true);
34 
35 final View view = (View) field.get(tab);
36 
37 if(view ==null) {
38 
39 continue;
40 
41 }
42 
43 view.setTag(i);
44 
45 view.setOnClickListener(newView.OnClickListener() {
46 
47 @Override
48 
49 public void onClick(View v) {
50 
51 //这里就可以根据业务需求处理事件了。
52 
53 int position = (int)view.getTag(); 
54 
55 mViewPager.setCurrentItem(position, false);
56 
57 }
58 
59 });
60 
61 }catch(NoSuchFieldException e) {
62 
63 e.printStackTrace();
64 
65 }catch(IllegalAccessException e) {
66 
67 e.printStackTrace();
68 
69 }
70 
71 }

 

posted @ 2017-03-15 15:42  90丶  阅读(7193)  评论(0编辑  收藏  举报