0

When trying to inject a fragment into a field, I get the following exception:

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

I also tried deriving my fragment from RoboFragment, however without any luck.

Side-question: Is it even possible to use roboguice 3.0b together with the navigation drawer fragment? And if, am I going the right way by just threating it as a normal fragment?

Code excerpt

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

public class BoardsDrawerFragment extends Fragment {

}

Call stack

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
xvdiff
  • 2,179
  • 2
  • 24
  • 47

1 Answers1

0

You should provide the id of your fragment, like:

@InjectFragment(R.id.fragment_boards_drawer)
private BoardsDrawerFragment _boardsDrawerFragment;
Tünde
  • 885
  • 4
  • 11
  • 24
  • The id is provided (fragment_boards_drawer) – xvdiff Oct 24 '14 at 14:51
  • You have to write **R.id.fragment_boards_drawer** instead of just **fragment_boards_drawer**. – Tünde Oct 24 '14 at 19:35
  • Oh, I see what you mean now. I forgot to copy some other code. "fragments_board_drawer" is a static reference to "R.id.fragments_board_drawer". The id is indeed provided correctly. (I'll remove the downvote in 16 hours) – xvdiff Oct 25 '14 at 07:42