@@ -31,45 +31,51 @@ public abstract class FinalActivity extends Activity {
31
31
32
32
public void setContentView (int layoutResID ) {
33
33
super .setContentView (layoutResID );
34
- initView ( );
34
+ initInjectedView ( this );
35
35
}
36
36
37
37
38
38
public void setContentView (View view , LayoutParams params ) {
39
39
super .setContentView (view , params );
40
- initView ( );
40
+ initInjectedView ( this );
41
41
}
42
42
43
43
44
44
public void setContentView (View view ) {
45
45
super .setContentView (view );
46
- initView ( );
46
+ initInjectedView ( this );
47
47
}
48
+
48
49
49
- private void initView (){
50
- Field [] fields = getClass ().getDeclaredFields ();
50
+ public static void initInjectedView (Activity activity ){
51
+ initInjectedView (activity , activity .getWindow ().getDecorView ());
52
+ }
53
+
54
+
55
+ public static void initInjectedView (Object injectedSource ,View sourceView ){
56
+ Field [] fields = injectedSource .getClass ().getDeclaredFields ();
51
57
if (fields !=null && fields .length >0 ){
52
58
for (Field field : fields ){
53
59
try {
54
60
field .setAccessible (true );
55
61
56
- if (field .get (this )!= null )
62
+ if (field .get (injectedSource )!= null )
57
63
continue ;
58
64
59
65
ViewInject viewInject = field .getAnnotation (ViewInject .class );
60
66
if (viewInject !=null ){
61
67
62
68
int viewId = viewInject .id ();
63
- field .set (this , findViewById (viewId ));
69
+ field .set (injectedSource , sourceView . findViewById (viewId ));
64
70
65
- setListener (field ,viewInject .click (),Method .Click );
66
- setListener (field ,viewInject .longClick (),Method .LongClick );
67
- setListener (field ,viewInject .itemClick (),Method .ItemClick );
68
- setListener (field ,viewInject .itemLongClick (),Method .itemLongClick );
71
+ setListener (injectedSource , field ,viewInject .click (),Method .Click );
72
+ setListener (injectedSource , field ,viewInject .longClick (),Method .LongClick );
73
+ setListener (injectedSource , field ,viewInject .itemClick (),Method .ItemClick );
74
+ setListener (injectedSource , field ,viewInject .itemLongClick (),Method .itemLongClick );
69
75
70
76
Select select = viewInject .select ();
71
77
if (!TextUtils .isEmpty (select .selected ())){
72
- setViewSelectListener (field ,select .selected (),select .noSelected ());
78
+ setViewSelectListener (injectedSource , field ,select .selected (),select .noSelected ());
73
79
}
74
80
75
81
}
@@ -81,40 +87,39 @@ private void initView(){
81
87
}
82
88
83
89
84
-
85
- private void setViewSelectListener (Field field ,String select ,String noSelect )throws Exception {
86
- Object obj = field .get (this );
90
+ private static void setViewSelectListener (Object injectedSource ,Field field ,String select ,String noSelect )throws Exception {
91
+ Object obj = field .get (injectedSource );
87
92
if (obj instanceof View ){
88
- ((AbsListView )obj ).setOnItemSelectedListener (new EventListener (this ).select (select ).noSelect (noSelect ));
93
+ ((AbsListView )obj ).setOnItemSelectedListener (new EventListener (injectedSource ).select (select ).noSelect (noSelect ));
89
94
}
90
95
}
91
96
92
97
93
- private void setListener (Field field ,String methodName ,Method method )throws Exception {
98
+ private static void setListener (Object injectedSource , Field field ,String methodName ,Method method )throws Exception {
94
99
if (methodName == null || methodName .trim ().length () == 0 )
95
100
return ;
96
101
97
- Object obj = field .get (this );
102
+ Object obj = field .get (injectedSource );
98
103
99
104
switch (method ) {
100
105
case Click :
101
106
if (obj instanceof View ){
102
- ((View )obj ).setOnClickListener (new EventListener (this ).click (methodName ));
107
+ ((View )obj ).setOnClickListener (new EventListener (injectedSource ).click (methodName ));
103
108
}
104
109
break ;
105
110
case ItemClick :
106
111
if (obj instanceof AbsListView ){
107
- ((AbsListView )obj ).setOnItemClickListener (new EventListener (this ).itemClick (methodName ));
112
+ ((AbsListView )obj ).setOnItemClickListener (new EventListener (injectedSource ).itemClick (methodName ));
108
113
}
109
114
break ;
110
115
case LongClick :
111
116
if (obj instanceof View ){
112
- ((View )obj ).setOnLongClickListener (new EventListener (this ).longClick (methodName ));
117
+ ((View )obj ).setOnLongClickListener (new EventListener (injectedSource ).longClick (methodName ));
113
118
}
114
119
break ;
115
120
case itemLongClick :
116
121
if (obj instanceof AbsListView ){
117
- ((AbsListView )obj ).setOnItemLongClickListener (new EventListener (this ).itemLongClick (methodName ));
122
+ ((AbsListView )obj ).setOnItemLongClickListener (new EventListener (injectedSource ).itemLongClick (methodName ));
118
123
}
119
124
break ;
120
125
default :
0 commit comments