|
36 | 36 | import org.androidannotations.handler.AnnotationHandler; |
37 | 37 | import org.androidannotations.handler.HasParameterHandlers; |
38 | 38 | import org.androidannotations.helper.CanonicalNameConstants; |
| 39 | +import org.androidannotations.holder.EFragmentHolder; |
| 40 | +import org.androidannotations.holder.HasActivityLifecycleMethods; |
39 | 41 | import org.androidannotations.holder.HasReceiverRegistration; |
40 | 42 | import org.androidannotations.holder.ReceiverRegistrationDelegate.IntentFilterData; |
41 | 43 |
|
@@ -138,22 +140,35 @@ private JFieldVar createReceiverField(HasReceiverRegistration holder, String rec |
138 | 140 | private void registerAndUnregisterReceiver(HasReceiverRegistration holder, Receiver.RegisterAt registerAt, JFieldVar intentFilterField, JFieldVar receiverField, boolean local) { |
139 | 141 | JBlock registerBlock = null; |
140 | 142 | JBlock unregisterBlock = null; |
141 | | - switch (registerAt) { |
142 | | - case OnCreateOnDestroy: |
143 | | - registerBlock = holder.getOnCreateAfterSuperBlock(); |
144 | | - unregisterBlock = holder.getOnDestroyBeforeSuperBlock(); |
145 | | - break; |
146 | | - case OnStartOnStop: |
147 | | - registerBlock = holder.getOnStartAfterSuperBlock(); |
148 | | - unregisterBlock = holder.getOnStopBeforeSuperBlock(); |
149 | | - break; |
150 | | - case OnResumeOnPause: |
151 | | - registerBlock = holder.getOnResumeAfterSuperBlock(); |
152 | | - unregisterBlock = holder.getOnPauseBeforeSuperBlock(); |
153 | | - break; |
154 | | - case OnAttachOnDetach: |
155 | | - registerBlock = holder.getOnAttachAfterSuperBlock(); |
156 | | - unregisterBlock = holder.getOnDetachBeforeSuperBlock(); |
| 143 | + |
| 144 | + if (holder instanceof HasActivityLifecycleMethods) { |
| 145 | + HasActivityLifecycleMethods activityLifecycleMethods = (HasActivityLifecycleMethods) holder; |
| 146 | + |
| 147 | + switch (registerAt) { |
| 148 | + case OnCreateOnDestroy: |
| 149 | + registerBlock = activityLifecycleMethods.getOnCreateAfterSuperBlock(); |
| 150 | + unregisterBlock = activityLifecycleMethods.getOnDestroyBeforeSuperBlock(); |
| 151 | + break; |
| 152 | + case OnStartOnStop: |
| 153 | + registerBlock = activityLifecycleMethods.getOnStartAfterSuperBlock(); |
| 154 | + unregisterBlock = activityLifecycleMethods.getOnStopBeforeSuperBlock(); |
| 155 | + break; |
| 156 | + case OnResumeOnPause: |
| 157 | + registerBlock = activityLifecycleMethods.getOnResumeAfterSuperBlock(); |
| 158 | + unregisterBlock = activityLifecycleMethods.getOnPauseBeforeSuperBlock(); |
| 159 | + break; |
| 160 | + } |
| 161 | + |
| 162 | + if (holder instanceof EFragmentHolder && registerAt == Receiver.RegisterAt.OnAttachOnDetach) { |
| 163 | + EFragmentHolder fragmentHolder = (EFragmentHolder) holder; |
| 164 | + |
| 165 | + registerBlock = fragmentHolder.getOnAttachAfterSuperBlock(); |
| 166 | + unregisterBlock = fragmentHolder.getOnDetachBeforeSuperBlock(); |
| 167 | + } |
| 168 | + |
| 169 | + } else { |
| 170 | + registerBlock = holder.getStartLifecycleAfterSuperBlock(); |
| 171 | + unregisterBlock = holder.getEndLifecycleBeforeSuperBlock(); |
157 | 172 | } |
158 | 173 |
|
159 | 174 | IJExpression broadcastManager; |
|
0 commit comments