将Extra注入DualPane(FragmentExample)DetailFragment

时间:2015-03-13 11:13:45

标签: android android-fragments roboguice

Hello overflows,

我是RoboGuice的新手,我非常喜欢它。我正在构建基于Master/Detail-Flow - 模板的应用程序。

当我点击列表元素时,我使用Detail-Fragment将其传递给Extras。正如RoboGuice提供的那样,我使用InjectExtra注释在Fragment - 侧面接收它。

所以Detail - 侧看起来像这样(顺便说一下:Place是一个简单的,可序列化的pojo-class

@Nullable
@InjectExtra(ARG_ITEM_PLACE)
Place place;

这可以使用智能手机(因此它的单个窗格和每个Fragment都在其自己的Activity

但是当我使用双窗格(即在平板电脑模拟器上)时,我得到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)

我真的不明白为什么会这样,因为这对我有用(在细节片段中;而不是@inject):

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments().containsKey(ARG_ITEM_PLACE)) {
        this.place = (Place) getArguments().get(ARG_ITEM_PLACE);
    }
}

也许有人可以为我揭开这一点。

提前致谢。

0 个答案:

没有答案
相关问题