2013-01-08 14 views
6

Voglio iniettare alcune viste da un layout xml a un RoboFragment ma sfortunatamente sto ricevendo Eccezione Nullpointer. Dato che RoboGuice (oltre ad essere un ottimo framework DI) ha pochissima documentazione, non so se posso usare @ContentView(R.layout.fragmentlayout) per annotare il mio RoboFragment. C'è qualcosa che dovrei fare invece? Quello che attualmente faccio è:
InjectView in RoboFragment

public class TestFragment extends RoboFragment { 

    @InjectView(R.id.upBtn) private Button upBtn; 

    @Override 
    public View onCreateView(LayoutInflater layoutInflater, 
      ViewGroup container, Bundle savedInstanceState) { 

     super.onCreateView(layoutInflater, container, savedInstanceState); 
     View view = layoutInflater.inflate(R.layout.fragmentlayout, container, false); 
     RoboGuice.getInjector(getActivity()).injectMembers(this); 
     upBtn.setSelected(false); // <------ Null pointer here 
     return view; 
    } 
} 
+0

Spero che abbiate dato un'occhiata a queste due domande: http://stackoverflow.com/questions/9780769/android-roboguice-inject-views-on-fragment e http://stackoverflow.com/questions/8289660/ any-simple-examples-using-roboguice-with-fragments-in-android –

+0

Sì. Il primo indica solo che l'iniezione avviene durante onViewCreated ma non riesco a capire come. Nel secondo ho anche provato RoboGuice.getInjector (getActivity()). InjectViewMembers (this); ma non è stato d'aiuto. –

risposta

14

Se si guarda alla fonte per RoboFragment, vedrete

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    RoboGuice.getInjector(getActivity()).injectViewMembers(this); 
} 

Se ti ostini a iniettare manualmente, utilizzare injectViewMembers(). Se è possibile ritardare la visualizzazione della vista fino a dopo onViewCreated(), verrà impostata automaticamente.

+1

La risposta giusta è qui ... – Snicolas

+0

Ok, hai ragione. Non ho accettato la risposta per tutto questo tempo perché stavo ancora ottenendo un puntatore nullo, ma per un altro motivo (stavo impostando il listener di pulsanti in onCreateView). Mi scuso per il mio ritardo .. –

+0

sebbene @ContextView non abbia funzionato ... forse sai se è possibile? –

-3

è necessario visualizzare tornare. Dopo upBtn.setSelected (false);

public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) { 

    super.onCreateView(layoutInflater, container, savedInstanceState); 
    View view = layoutInflater.inflate(R.layout.fragmentlayout, container, false); 
    RoboGuice.getInjector(getActivity()).injectMembers(this); 
    upBtn = (Button) view.findViewById(YOUR_ID); // Initialization 
    upBtn.setSelected(false); // <------ Null pointer here 
return view; 
} 
+1

Questo non risolverà 'NullPointerException'. Ma hai ragione, OP ha dimenticato la dichiarazione di ritorno nella loro domanda (non nel suo vero codice). – jelies

+1

Infatti. Ho modificato il frammento di codice. –

+0

Se funziona, puoi validare la risposta per favore? – Tsunaze

Problemi correlati