2013-01-08 8 views
6

Chcę wstrzyknąć niektóre widoki z układu xml do RoboFragment, ale niestety dostaję wyjątek Nullpointer. Ponieważ RoboGuice (oprócz tego, że jest świetnym frameworkiem DI) ma bardzo mało dokumentacji, nie wiem, czy mogę użyć @ContentView(R.layout.fragmentlayout) do adnotacji mojego RoboFragmentu. Czy jest coś, co powinienem zrobić zamiast tego? Co mogę zrobić, to obecnie:
InjectView w 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

Mam nadzieję, że zapoznałeś się z tymi dwoma pytaniami: http://stackoverflow.com/questions/9780769/android-roboguice-inject-views-on-fragment i http://stackoverflow.com/questions/8289660/ dowolne-proste-przykłady-używanie-roboguice-z-fragmentami-w-Androidzie –

+0

Tak. Pierwszy z nich po prostu wskazuje, że iniekcja ma miejsce w trakcie procesu onViewCreated, ale nie znam tego w jaki sposób. W drugiej wypróbowałem także RoboGuice.getInjector (getActivity()). InjectViewMembers (this); ale to nie pomogło. –

Odpowiedz

14

Jeśli spojrzeć na źródło RoboFragment zobaczysz

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

Jeśli nalegać na wstrzykiwanie ręcznie, użyj injectViewMembers(). Jeśli możesz opóźnić dotknięcie widoku do czasu po onViewCreated(), to zostanie ono ustawione dla ciebie.

+1

Dobra odpowiedź brzmi tutaj ... – Snicolas

+0

OK, masz rację. Przez cały czas nie akceptowałem odpowiedzi, ponieważ wciąż otrzymywałem wskaźnik zerowy, ale z innego powodu (ustawiałem program nasłuchujący na onCreateView). Przepraszam za opóźnienie .. –

+0

chociaż @ContextView nie działa ... czy może wiesz, czy to jest możliwe? –

-3

Trzeba widok powrotu. Po 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

Nie rozwiąże to problemu "NullPointerException". Ale masz rację, OP zapomniał o deklaracji zwrotu w swoim pytaniu (nie w swoim prawdziwym kodzie). – jelies

+1

Rzeczywiście. Edytowałem fragment kodu. –

+0

Jeśli to działa, czy możesz potwierdzić odpowiedź, proszę? – Tsunaze

Powiązane problemy