Hello fellow Overflows,
I am new to RoboGuice
and I pretty like it. I am building an App based on the Master/Detail-Flow
-Template.
When I click on a list-element I pass it to the Detail-Fragment
using Extras
. As RoboGuice
offers it, I am using the InjectExtra
Annotation to receive it on Fragment
-Side.
So the Detail
-side looks something like this (btw: Place is a simple, serializable pojo-class
)
@Nullable
@InjectExtra(ARG_ITEM_PLACE)
Place place;
This works using a Smartphone (so its single pane and each Fragment
is in its own Activity
)
But When I use the dual-pane (i.e. on a tablet emulator), I get an com.google.inject.ProvisionException
.
03-13 10:32:51.824 1380-1380/de.NextBike E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: de.NextBike, PID: 1380
com.google.inject.ProvisionException: Unable to provision, see the following errors:
1) Error injecting de.NextBike.activity.ItemDetailFragment using roboguice.inject.ExtrasListener$ExtrasMembersInjector@5284c21c.
Reason: java.lang.IllegalStateException: Can't find the mandatory extra identified by key [place] on field class de.NextBike.activity.ItemDetailFragment.place
while locating de.NextBike.activity.ItemDetailFragment
1 error
at com.google.inject.internal.Errors.throwProvisionExceptionIfErrorsExist(Errors.java:464)
at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:67)
at com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:977)
at roboguice.inject.ContextScopedRoboInjector.injectMembersWithoutViews(ContextScopedRoboInjector.java:247)
at roboguice.fragment.provided.RoboFragment.onCreate(RoboFragment.java:21)
at de.NextBike.activity.ItemDetailFragment.onCreate(ItemDetailFragment.java:84)
at android.app.Fragment.performCreate(Fragment.java:1678)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:859)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.app.BackStackRecord.run(BackStackRecord.java:684)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: Can't find the mandatory extra identified by key [place] on field class de.NextBike.activity.ItemDetailFragment.place
at roboguice.inject.ExtrasListener$ExtrasMembersInjector.injectMembers(ExtrasListener.java:115)
at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:140)
at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:93)
at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:80)
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1059)
at com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:80)
at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:62)
at com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:977)
at roboguice.inject.ContextScopedRoboInjector.injectMembersWithoutViews(ContextScopedRoboInjector.java:247)
at roboguice.fragment.provided.RoboFragment.onCreate(RoboFragment.java:21)
at de.NextBike.activity.ItemDetailFragment.onCreate(ItemDetailFragment.java:84)
at android.app.Fragment.performCreate(Fragment.java:1678)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:859)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.app.BackStackRecord.run(BackStackRecord.java:684)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
I really don't understand why this is happening as this is working for me (in the Detail-Fragment; instead of the @inject
):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments().containsKey(ARG_ITEM_PLACE)) {
this.place = (Place) getArguments().get(ARG_ITEM_PLACE);
}
}
Maybe someone can shad some light on this for me.
Thanks in advance.