2014-05-22 5 views
5

हम सभी जानते हैं कि जब Fragment और FragmentPagerAdapter साथ ViewPager का उपयोग कर हम 3 Fragment भरी हुई मिलती है: दिखाई एक है, और दोनों इसके पक्ष में से प्रत्येक पर।कैसे पता करने के लिए यदि एक टुकड़ा पहले से ही onCreateView कहा जाता है()

तो, अगर मेरे पास 7 Fragments है और मैं उनके माध्यम से यह देख रहा हूं कि उनमें से कौन से 3 लोड किए गए हैं, और इसका मतलब है कि onCreateView() पहले से ही कहलाया गया है, मैं इसे कैसे निर्धारित कर सकता हूं?

संपादित करें:Fragment एक है कि ViewPager दिखा रहा है, सिर्फ इतना है कि पहले से ही onCreateView() बुलाया गया है होना करने के लिए नहीं है।

उत्तर

8

खैर तार्किक, यह एक उचित परीक्षण करता है, तो onCreateView बुलाया गया है होगा:

myFragment.getView() != null; 

मान लें कि आप एक पेजर पुनरावृति में टुकड़े के सभी के लिए एक संदर्भ है, उन्हें और देखें कि क्या वे एक दृश्य ।

http://developer.android.com/reference/android/app/Fragment.html#getView()

अद्यतन

ऊपर जवाब मान लिया गया है कि आपके टुकड़े हमेशा एक दृश्य बनाते हैं, और अप्रत्यक्ष टुकड़े नहीं हैं। वे हैं तो मैं उप सुझाव है तो तरह टुकड़ा classing:

public abstract class SubFragment extends Fragment 
{ 
    protected boolean onCreateViewCalled = false; 

    public boolean hasOnCreateViewBeenCalled() 
    { 
     return onCreateViewCalled; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup Container, Bundle state){ 
     onCreateViewCalled = true; 
     return null; 
    } 
} 

बस ध्यान में रखना आगे उप वर्गों सुपर फोन या झंडा खुद को वे के रूप में अच्छी onCreateView ओवरराइड करना चाहिए स्थापित करने के लिए होगा।

+1

यह निर्धारित करने योग्य नहीं है क्योंकि 'onCreateView' अशक्त लौट सकते है। – interlude

+0

@interlude - सच्ची कहानी। Fragment के पास एक दृश्य नहीं है। – dell116

-3

तुम भी Fragment.isVisible() के लिए जाँच हो सका क्योंकि एक टुकड़ा दिखाई दे अवस्था में है जब यह एक ViewPager की गुप्त पृष्ठों की सीमा में है।

संपादित करें: लेकिन यह वास्तव में वास्तव में इस बात पर निर्भर करता है कि आप वास्तव में अपने प्रश्न के साथ क्या हासिल करना चाहते हैं। शायद आपके यूआई तैयार होने पर आपके टुकड़ों में सभी यूआई के लिए कुछ प्रकार का अपडेट हो सकता है?

संपादित करें:

बस एक और इसके अलावा, आप onViewCreated() को सुनने और एक ध्वज सेट कर सकते हैं। या अपनी गतिविधि को सूचित करें और आगे काम करें (getActivity() इस समय आपकी गतिविधि वापस कर देगा)। लेकिन वास्तव में, बेहतर स्थिति बताएं कि आप अपने प्रश्न के साथ क्या हासिल करना चाहते हैं।

+0

यदि टुकड़े का दृश्य छुपा हुआ है तो यह विधि गलत हो जाएगी। – interlude

+0

हाँ, आप सही हैं, यह करने का यह एक छोटा सा तरीका है। ^^ प्रश्नकर्ता का जवाब देना आसान होगा, अगर प्रश्नकर्ता यह बताएगा कि उसे 'क्रिएटिव व्यू() 'के बारे में जानकारी क्यों चाहिए।वह निश्चित रूप से 'ऑन व्यूक्रेटेड()' सुन सकता है और ध्वज सेट कर सकता है, लेकिन मुझे नहीं पता कि यह उसकी जरूरतों को पूरा करता है या नहीं। – einschnaehkeee

3

मैंने फ्रैगमेंट में एक इंटरफ़ेस जोड़ा। ऐसा लगता है कि:

protected OnCreateViewCallback createViewCallback = null; 

public void setCreateViewCallback(OnCreateViewCallback createViewCallback) { 
    this.createViewCallback = createViewCallback; 
} 

public interface OnCreateViewCallback { 

    void onCreateView(); 

} 

मेरी onCreateView में():

//initialize your view. 
    if (createViewCallback != null) { 
     createViewCallback.onCreateView(); 
     createViewCallback = null; 
    } 
    return mainView; 

मेरी गतिविधि से:

 if (ocrFragment.getView() == null) { 
      ocrFragment.setCreateViewCallback(new MainScreenFragment.OnCreateViewCallback() { 
       @Override 
       public void onCreateView() { 
        ocrFragment.ocrImage(picture, false); 
       } 
      }); 
     } else { 
      ocrFragment.ocrImage(picture, false); 
     } 
संबंधित मुद्दे