2013-01-08 17 views
6

मैं एक एक्सएमएल लेआउट से रोबोफ्रैगमेंट में कुछ विचार इंजेक्ट करना चाहता हूं लेकिन दुर्भाग्यवश मुझे नलपोइंटर अपवाद मिल रहा है। चूंकि रोबोगुइस (एक महान डी ढांचे के अलावा) बहुत कम दस्तावेज है, मुझे नहीं पता कि मैं अपने रोबोफ्रैगमेंट को एनोटेट करने के लिए @ContentView(R.layout.fragmentlayout) का उपयोग कर सकता हूं या नहीं। क्या मुझे इसके बजाय कुछ करना चाहिए? मैं वर्तमान में क्या करता हूं:
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

मुझे आशा है कि आपने इन दो सवालों पर एक नज़र डाली है: http://stackoverflow.com/questions/9780769/android-roboguice-inject-views-on-fragment और http://stackoverflow.com/questions/8289660/ किसी भी सरल-उदाहरण-उपयोग-रोबोगुइस-साथ-टुकड़े-इन-एंड्रॉइड –

+0

हां। पहला व्यक्ति सिर्फ यह इंगित करता है कि इंजेक्शन ऑनव्यूक्रेटेड के दौरान होता है लेकिन मैं यह नहीं समझता कि कैसे। दूसरे में मैंने RoboGuice.getInjector (getActivity()) भी कोशिश की। इंजेक्शन व्यूमेम्बर (यह); लेकिन इससे मदद नहीं मिली। –

उत्तर

14

आप RoboFragment के लिए स्रोत पर देखो, तो आप

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

देखेंगे आप मैन्युअल रूप से इंजेक्शन लगाने पर जोर देते हैं, तो injectViewMembers() का उपयोग करें। यदि आप onViewCreated() के बाद तक दृश्य को छूने में देरी कर सकते हैं, तो यह आपके लिए स्थापित किया जाएगा।

+1

त्रि अधिकार का जवाब यहाँ है ... – Snicolas

+0

ठीक है आप सही हैं। मैंने इस बार जवाब स्वीकार नहीं किया क्योंकि मुझे अभी भी एक शून्य सूचक मिल रहा था, लेकिन किसी अन्य कारण से (मैं बटन श्रोता को क्रिएटिव्यू में सेट कर रहा था)। मैं अपने मंदता के लिए क्षमा चाहता हूं .. –

+0

हालांकि @ContextView काम नहीं किया ... क्या आपको शायद पता चलेगा कि यह संभव है? –

-3

आपको दृश्य वापस करने की आवश्यकता है। UpBtn.set चयन के बाद (झूठा);

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

यह 'NullPointerException' को हल नहीं करेगा। लेकिन आप सही हैं, ओपी अपने प्रश्न में वापसी बयान भूल गया है (अपने असली कोड में नहीं)। वास्तव में – jelies

+1

। मैंने कोड खंड को संपादित किया। –

+0

यदि यह काम करता है, तो क्या आप उत्तर को सत्यापित कर सकते हैं? – Tsunaze