@@ -36,113 +36,143 @@ protected void onCreate(Bundle savedInstanceState) {
36
36
37
37
public void setContentView (int layoutResID ) {
38
38
super .setContentView (layoutResID );
39
- initView ( );
39
+ FinalActivity . initInjectedView ( this );
40
40
}
41
41
42
42
43
43
public void setContentView (View view , LayoutParams params ) {
44
44
super .setContentView (view , params );
45
- initView ( );
45
+ FinalActivity . initInjectedView ( this );
46
46
}
47
47
48
48
49
49
50
50
public void setContentView (View view ) {
51
51
super .setContentView (view );
52
- initView ( );
52
+ FinalActivity . initInjectedView ( this );
53
53
}
54
54
55
+ /**
56
+ * 初始化Actvity中的注入属性
57
+ * 可用于与其他框架合用(如ActionBarShelock)
58
+ * <p>
59
+ * *必须在setContentView之后调用:
60
+ * <pre>
61
+ * protected void onCreate(Bundle savedInstanceState) {
62
+ * super.onCreate(savedInstanceState);
63
+ * setContentView(view);
64
+ * FinalActivity.initInjectedView(this);
65
+ * }
66
+ * </pre>
67
+ * @param sourceActivity
68
+ */
69
+ public static void initInjectedView (Activity sourceActivity ){
70
+ initInjectedView (sourceActivity ,sourceActivity .getWindow ().getDecorView ());
71
+ }
55
72
56
-
57
- private void initView (){
58
- Field [] fields = getClass ().getDeclaredFields ();
73
+ /**
74
+ * 初始化指定View中的注入属性
75
+ * 可用于Fragment内使用InjectView<p>
76
+ * 示例:<p>
77
+ * 在onCreateView中:
78
+ * <pre>
79
+ * public View onCreateView(LayoutInflater inflater, ViewGroup container,
80
+ * Bundle savedInstanceState) {
81
+ * View viewRoot = inflater.inflate(R.layout.map_frame, container, false);
82
+ * FinalActivity.initInjectedView(this,viewRoot);
83
+ * }
84
+ * </pre>
85
+ * @param sourceView
86
+ */
87
+ public static void initInjectedView (Object injectedSource ,View sourceView ){
88
+ Field [] fields = injectedSource .getClass ().getDeclaredFields ();
59
89
if (fields !=null && fields .length >0 ){
60
90
for (Field field : fields ){
61
91
ViewInject viewInject = field .getAnnotation (ViewInject .class );
62
92
if (viewInject !=null ){
63
93
int viewId = viewInject .id ();
64
94
try {
65
95
field .setAccessible (true );
66
- field .set (this , findViewById (viewId ));
96
+ field .set (injectedSource , sourceView . findViewById (viewId ));
67
97
} catch (Exception e ) {
68
98
e .printStackTrace ();
69
99
}
70
100
71
101
String clickMethod = viewInject .click ();
72
102
if (!TextUtils .isEmpty (clickMethod ))
73
- setViewClickListener (field ,clickMethod );
103
+ setViewClickListener (sourceView , field ,clickMethod );
74
104
75
105
String longClickMethod = viewInject .longClick ();
76
106
if (!TextUtils .isEmpty (longClickMethod ))
77
- setViewLongClickListener (field ,longClickMethod );
107
+ setViewLongClickListener (sourceView , field ,longClickMethod );
78
108
79
109
String itemClickMethod = viewInject .itemClick ();
80
110
if (!TextUtils .isEmpty (itemClickMethod ))
81
- setItemClickListener (field ,itemClickMethod );
111
+ setItemClickListener (sourceView , field ,itemClickMethod );
82
112
83
113
String itemLongClickMethod = viewInject .itemLongClick ();
84
114
if (!TextUtils .isEmpty (itemLongClickMethod ))
85
- setItemLongClickListener (field ,itemLongClickMethod );
115
+ setItemLongClickListener (sourceView , field ,itemLongClickMethod );
86
116
87
117
Select select = viewInject .select ();
88
118
if (!TextUtils .isEmpty (select .selected ()))
89
- setViewSelectListener (field ,select .selected (),select .noSelected ());
119
+ setViewSelectListener (sourceView , field ,select .selected (),select .noSelected ());
90
120
91
121
}
92
122
}
93
123
}
94
124
}
95
125
96
126
97
- private void setViewClickListener (Field field ,String clickMethod ){
127
+ private static void setViewClickListener (Object injectedSource , Field field ,String clickMethod ){
98
128
try {
99
- Object obj = field .get (this );
129
+ Object obj = field .get (injectedSource );
100
130
if (obj instanceof View ){
101
- ((View )obj ).setOnClickListener (new EventListener (this ).click (clickMethod ));
131
+ ((View )obj ).setOnClickListener (new EventListener (injectedSource ).click (clickMethod ));
102
132
}
103
133
} catch (Exception e ) {
104
134
e .printStackTrace ();
105
135
}
106
136
}
107
137
108
- private void setViewLongClickListener (Field field ,String clickMethod ){
138
+ private static void setViewLongClickListener (Object injectedSource , Field field ,String clickMethod ){
109
139
try {
110
- Object obj = field .get (this );
140
+ Object obj = field .get (injectedSource );
111
141
if (obj instanceof View ){
112
- ((View )obj ).setOnLongClickListener (new EventListener (this ).longClick (clickMethod ));
142
+ ((View )obj ).setOnLongClickListener (new EventListener (injectedSource ).longClick (clickMethod ));
113
143
}
114
144
} catch (Exception e ) {
115
145
e .printStackTrace ();
116
146
}
117
147
}
118
148
119
- private void setItemClickListener (Field field ,String itemClickMethod ){
149
+ private static void setItemClickListener (Object injectedSource , Field field ,String itemClickMethod ){
120
150
try {
121
- Object obj = field .get (this );
151
+ Object obj = field .get (injectedSource );
122
152
if (obj instanceof AbsListView ){
123
- ((AbsListView )obj ).setOnItemClickListener (new EventListener (this ).itemClick (itemClickMethod ));
153
+ ((AbsListView )obj ).setOnItemClickListener (new EventListener (injectedSource ).itemClick (itemClickMethod ));
124
154
}
125
155
} catch (Exception e ) {
126
156
e .printStackTrace ();
127
157
}
128
158
}
129
159
130
- private void setItemLongClickListener (Field field ,String itemClickMethod ){
160
+ private static void setItemLongClickListener (Object injectedSource , Field field ,String itemClickMethod ){
131
161
try {
132
- Object obj = field .get (this );
162
+ Object obj = field .get (injectedSource );
133
163
if (obj instanceof AbsListView ){
134
- ((AbsListView )obj ).setOnItemLongClickListener (new EventListener (this ).itemLongClick (itemClickMethod ));
164
+ ((AbsListView )obj ).setOnItemLongClickListener (new EventListener (injectedSource ).itemLongClick (itemClickMethod ));
135
165
}
136
166
} catch (Exception e ) {
137
167
e .printStackTrace ();
138
168
}
139
169
}
140
170
141
- private void setViewSelectListener (Field field ,String select ,String noSelect ){
171
+ private static void setViewSelectListener (Object injectedSource , Field field ,String select ,String noSelect ){
142
172
try {
143
- Object obj = field .get (this );
173
+ Object obj = field .get (injectedSource );
144
174
if (obj instanceof View ){
145
- ((AbsListView )obj ).setOnItemSelectedListener (new EventListener (this ).select (select ).noSelect (noSelect ));
175
+ ((AbsListView )obj ).setOnItemSelectedListener (new EventListener (injectedSource ).select (select ).noSelect (noSelect ));
146
176
}
147
177
} catch (Exception e ) {
148
178
e .printStackTrace ();
0 commit comments