2012-11-29 18 views
8

मुझे गतिविधि से डेटा को गुजरने में कुछ समस्याएं हैं। मैंने चारों ओर खोज की लेकिन मुझे कोई जवाब नहीं मिला जो मेरी स्थिति के अनुरूप है। मेरे पास CurrentFragment.java और HistoryFragment.java नामक 2 खंड वर्ग है। मैं उन्हें एक गतिविधि में टैब के रूप में शुरू करता हूं।गतिविधि से लेकर खंड तक डेटा कैसे पास करें

Tab tab = actionBar.newTab() 
      .setText(R.string.tab_current) 
      .setTabListener(new TaskitTabListener<CurrentFragment>(
        this, "current", CurrentFragment.class)); 
    actionBar.addTab(tab); 

    tab = actionBar.newTab() 
      .setText(R.string.tab_history) 
      .setTabListener(new TaskitTabListener<HistoryFragment>(
        this, "history", HistoryFragment.class)); 
    actionBar.addTab(tab); 

मैं टुकड़े में गतिविधि में setArguments और getArguments उपयोग करने के लिए कहा गया था। लेकिन इस स्थिति में मैं गतिविधि में खंड वस्तुओं कैसे प्राप्त करूं? मैं getFragmentManager().findFragmentById() का उपयोग नहीं कर सकता क्योंकि टुकड़े प्रोग्रामेटिक रूप से जोड़े जाते हैं।

इसके अलावा, मुझे कुछ पोस्ट मिलते हैं कि मैं गतिविधि कंटेनर में डेटा तक पहुंचने के लिए getActivity() का उपयोग कर सकता हूं, लेकिन मेरे लिए यह शून्य वापस लौट रहा है। क्या किसी के पास इसका एक उदाहरण है?

+0

'getActivity()' 'रिटर्न [onAttach] में null' (http://developer.android.com/reference/android/support/v4/app/Fragment.html#onAttach%28android करता है। ऐप। सक्रियता% 2 9) विधि? – svenkapudija

+0

अपने TaskitTabListener.onTabSlected() में त्रुटियों को सेट करने का प्रयास करें। – faylon

+0

@svenkapudija हां यह 'onAttach' में शून्य है। – OckhamTheRazor

उत्तर

7

[संपादित करें] मैंने आपके प्रश्न का बेहतर जवाब देने के लिए अपना उत्तर अपडेट कर दिया है।

आप getFragmentManager().findFragmentByTag("tag") के साथ टैग द्वारा टुकड़े भी पुनर्प्राप्त कर सकते हैं। हालांकि सावधान रहें, अगर टैब को अभी तक नहीं देखा गया है तो खंड मौजूद नहीं होगा।

CurrentFragment curFrag = (CurrentFragment) 
    getFragmentManager().findFragmentByTag("current"); 
if(curFrag == null) { 
    // The user hasn't viewed this tab yet 
} else { 
    // Here's your data is a custom function you wrote to receive data as a fragment 
    curFrag.heresYourData(data) 
} 

यदि आप गतिविधि से डेटा खींचने के लिए टुकड़े चाहते हैं तो आपकी गतिविधि खंड द्वारा परिभाषित एक इंटरफ़ेस को कार्यान्वित करती है। onAttach(Activity activity) टुकड़ों के लिए लाइफसाइकिल फ़ंक्शन में आपको उस गतिविधि तक पहुंच प्राप्त होती है जिसने खंड बनाया है ताकि आप उस गतिविधि को इंटरफ़ेस के रूप में परिभाषित कर सकें और फ़ंक्शन कॉल कर सकें।

public interface DataPullingInterface { 
    public String getData(); 
} 

तब की तरह अपनी गतिविधि में इंटरफ़ेस को लागू: कि (तुम भी इंटरफ़ेस को उसकी अपनी फ़ाइल कर सकते हैं अगर आप कई टुकड़े के बीच एक ही इंटरफ़ेस साझा करना चाहते हैं) इस तरह अपने टुकड़ा में इंटरफ़ेस डाल करने के लिए इस:

public class MyActivity extends Activity implements DataPullingInterface { 
    // Your activity code here 
    public String getData() { 
     return "This is my data" 
    } 
} 

अंत में CurrentFragment में अपने onAttach(Activity activity) विधि में गतिविधि आप इंटरफ़ेस आपके द्वारा बनाई गई है ताकि आप उन कार्यों कॉल कर सकते हैं के रूप में प्राप्त डाली।

private DataPullingInterface mHostInterface; 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    if(D) Log.d(TAG, "onAttach"); 
    try { 
     mHostInterface = (DataPullingInterface) activity; 
    } catch(ClassCastException e) { 
     throw new ClassCastException(activity.toString() + " must implement DataPullingInterface"); 
    } 
    String myData = mHostInterface.getData();   
} 
+0

उत्तर के लिए धन्यवाद, लेकिन क्या आप व्याख्या कर सकते हैं कि इसका अर्थ क्या है "खंड द्वारा परिभाषित एक इंटरफ़ेस"? – OckhamTheRazor

+0

मैंने अपना जवाब अपडेट किया क्योंकि मैं टिप्पणियों में सुंदर कोड नहीं कर सकता। अपने उत्तर के लिए इसे देखें। –

+0

बहुत बढ़िया! ये मेरे लिए सही है। आपकी सहायता के लिए धन्यवाद. – OckhamTheRazor

संबंधित मुद्दे