【问题标题】:java.lang.UnsupportedOperationException trying inject fragmentjava.lang.UnsupportedOperationException 尝试注入片段
【发布时间】:2014-10-14 18:23:19
【问题描述】:

尝试将片段注入字段时,出现以下异常:

Reason: java.lang.UnsupportedOperationException: You may only 
     use @InjectFragment on fields descended from type Fragment

我也尝试从RoboFragment 派生我的片段,但是没有任何运气。

附带问题:是否可以将 roboguice 3.0b 与导航抽屉片段一起使用?如果,我只是把它当作一个普通的碎片来威胁,我是不是走对了路?

代码摘录

@ContentView(activity_main)
public class MainActivity extends RoboActivity
    implements BoardsDrawerFragment.BoardsDrawerCallbacks
{
     @InjectFragment(fragment_boards_drawer)
     private BoardsDrawerFragment _boardsDrawerFragment;
}

public class BoardsDrawerFragment extends Fragment {

}

调用堆栈

java.lang.UnsupportedOperationException: You may only use @InjectFragment on fields descended from type Fragment
        at roboguice.inject.ViewListener.hear(ViewListener.java:76)
        at com.google.inject.internal.MembersInjectorStore.createWithListeners(MembersInjectorStore.java:102)
        at com.google.inject.internal.MembersInjectorStore.access$000(MembersInjectorStore.java:34)
        at com.google.inject.internal.MembersInjectorStore$1.create(MembersInjectorStore.java:42)
        at com.google.inject.internal.MembersInjectorStore$1.create(MembersInjectorStore.java:39)
        at com.google.inject.internal.FailableCache$1.apply(FailableCache.java:39)
        at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:549)
        at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:419)
        at com.google.inject.internal.util.$CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2041)
        at com.google.inject.internal.FailableCache.get(FailableCache.java:50)
        at com.google.inject.internal.MembersInjectorStore.get(MembersInjectorStore.java:65)
        at com.google.inject.internal.InjectorImpl.getMembersInjector(InjectorImpl.java:950)
        ... 19 more

【问题讨论】:

    标签: java android android-fragments dependency-injection roboguice


    【解决方案1】:

    您应该提供片段的 id,例如:

    @InjectFragment(R.id.fragment_boards_drawer)
    private BoardsDrawerFragment _boardsDrawerFragment;
    

    【讨论】:

    • 提供了id(fragment_boards_drawer)
    • 你必须写 R.id.fragment_boards_drawer 而不仅仅是 fragment_boards_drawer
    • 哦,我明白你的意思了。我忘了复制一些其他代码。 “fragments_board_drawer”是对“R.id.fragments_board_drawer”的静态引用。确实提供了正确的 id。 (我会在 16 小时内删除反对票)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    相关资源
    最近更新 更多