You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Feb 26, 2023. It is now read-only.
Csaba Kozák edited this page May 3, 2015
·
10 revisions
This is a planned feature, does not exist yet
Since AndroidAnnotations X.Y
Introduction
The @Shared and @Share annotations enable an Activity to share complex objects with its Fragment.
The activity annotates with @Share the members that will be exposed to its children fragments.
The matching member of the fragment that is annotated with @Shared will then reference the activity shared member.
Those annotations let fragments have access to objects that live within the activity lifecycle like SQLiteOpenHelper.
Sample
The parent activity:
@EActivity(R.layout.activity_main)
publicclassMainActivityextendsActivity {
@ShareStringparam1 = "activity string";
@ShareBundleparam2;
@Share@BeanMyBeanbean;
@ShareintsomeInt = 42;
@AfterInjectvoidinitInject() {
// You can do custom member initialization hereparam2 = newBundle();
param2.putString("are we", "done?");
}
}
And the fragment
@EFragment(R.layout.fragment_main)
publicclassMainFragmentextendsFragment {
@SharedStringparam1 = "fragment string";
@SharedBundleparam2;
@SharedMyBeanbean;
@SharedStringisNotSharedByActivity ;
@SharedintsomeInt = 42;
@AfterViewsvoidinit() {
// All the members are initialized and ready !
}
}
Shared members assignment
The fragment shared members must have the exact same name (and assignable types, of course) as the ones that the activity shares.
The fragment shared members are initialized just before the @AfterViews callback. They won't be initialized in time for the @AfterInject callback.
If the parent activity doesn't share any member, the fragment shared members are left untouched.
If the parent activity shares members, then the fragment shared members will be resolved and initialized. Any member that doesn't match an activity shared member will be initialized with null and a warning will be displayed in the logcat console:
The member 'isNotSharedByActivity' is not declared by the activity 'MainActivity' or is not annotated with @Share
Primitive types and immutable objects
Shared member of primitive types (int, boolean...) and or immutable types (String, Integer...) will be successfully initialized with the parent activity values but any subsequent modifications won't be passed on (as you might have expected).
For those reasons, all fragment shared members will be reset to null when the fragment is destroyed (onDestroyView() event), whether the parent activity shares members or not.