diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/ViewByIdHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/ViewByIdHandler.java index 3b78a64e2a..eb0176fc35 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/ViewByIdHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/ViewByIdHandler.java @@ -71,6 +71,6 @@ public void process(Element element, EComponentWithViewSupportHolder holder) { JClass viewClass = refClass(typeQualifiedName); JFieldRef fieldRef = ref(fieldName); - holder.assignFindViewById(idRef, viewClass, fieldRef); + holder.processViewById(idRef, viewClass, fieldRef); } } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EComponentWithViewSupportHolder.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EComponentWithViewSupportHolder.java index 51c7c25c36..e02bee1a6b 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EComponentWithViewSupportHolder.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EComponentWithViewSupportHolder.java @@ -87,6 +87,10 @@ public JInvocation findViewById(JFieldRef idRef) { return findViewById; } + public void processViewById(JFieldRef idRef, JClass viewClass, JFieldRef fieldRef) { + assignFindViewById(idRef, viewClass, fieldRef); + } + public void assignFindViewById(JFieldRef idRef, JClass viewClass, JFieldRef fieldRef) { String idRefString = codeModelHelper.getIdStringFromIdFieldRef(idRef); FoundViewHolder foundViewHolder = foundViewsHolders.get(idRefString); diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java index 6960242263..836266cf8f 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java @@ -65,6 +65,7 @@ public class EFragmentHolder extends EComponentWithViewSupportHolder implements private JBlock onPauseBeforeSuperBlock; private JBlock onAttachAfterSuperBlock; private JBlock onDetachBeforeSuperBlock; + private JBlock onDestroyViewAfterSuperBlock; public EFragmentHolder(ProcessHolder processHolder, TypeElement annotatedElement) throws Exception { super(processHolder, annotatedElement); @@ -217,13 +218,17 @@ protected void setInit() { public JFieldVar getContentView() { if (contentView == null) { - setContentView(); - setOnCreateView(); - setOnDestroyView(); + setContentViewRelatedMethods(); } return contentView; } + private void setContentViewRelatedMethods() { + setContentView(); + setOnCreateView(); + setOnDestroyView(); + } + private void setContentView() { contentView = generatedClass.field(PRIVATE, classes().VIEW, "contentView_"); } @@ -249,8 +254,27 @@ private void setOnDestroyView() { JMethod onDestroyView = generatedClass.method(PUBLIC, codeModel().VOID, "onDestroyView"); onDestroyView.annotate(Override.class); JBlock body = onDestroyView.body(); - body.assign(contentView, _null()); body.invoke(_super(), onDestroyView); + body.assign(contentView, _null()); + onDestroyViewAfterSuperBlock = body.block(); + } + + private JBlock getOnDestroyViewAfterSuperBlock() { + if (onDestroyViewAfterSuperBlock == null) { + setContentViewRelatedMethods(); + } + return onDestroyViewAfterSuperBlock; + } + + @Override + public void processViewById(JFieldRef idRef, JClass viewClass, JFieldRef fieldRef) { + super.processViewById(idRef, viewClass, fieldRef); + clearInjectedView(fieldRef); + } + + private void clearInjectedView(JFieldRef fieldRef) { + JBlock block = getOnDestroyViewAfterSuperBlock(); + block.assign(fieldRef, _null()); } private void setOnStart() {