मैं शुरुआती लोगों के लिए जोड़ना चाहूंगा कि यहां 2 सबसे उत्कीर्ण उत्तरों के बीच अंतर एक टुकड़े के अलग-अलग उपयोग द्वारा दिया गया है।
यदि आप जावा क्लास के भीतर उस खंड का उपयोग करते हैं जहां आपके पास वह डेटा है जिसे आप पास करना चाहते हैं, तो आप डेटा पास करने के लिए पहला उत्तर लागू कर सकते हैं:
Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);
यदि आप उदाहरण के लिए टैब किए गए टुकड़ों के लिए एंड्रॉइड स्टूडियो द्वारा दिए गए डिफ़ॉल्ट कोड का उपयोग करते हैं, तो यह कोड काम नहीं करेगा।
भले ही आप अपने FragmentClasses के साथ डिफ़ॉल्ट प्लेसहोल्डरफ़्रेग्मेंट को प्रतिस्थापित करते हैं, और यह भी काम नहीं करेगा, भले ही आप GetItem के लिए एक स्विच जोड़कर नई स्थिति के लिए FragmentPagerAdapter को ठीक करें () और GetPitTitle के लिए एक और स्विच () (जैसा कि यहां दिखाया गया है )
चेतावनी: ऊपर उल्लिखित क्लिप में कोड त्रुटियाँ हैं, जिन्हें मैं बाद में यहाँ समझाता हूँ, लेकिन यह देखने के लिए उपयोगी है कि आप टैब्लेट के टुकड़ों के लिए डिफ़ॉल्ट कोड से संपादन योग्य कोड तक कैसे जाते हैं)! यदि आप उस क्लिप से जावा क्लासेस और xml फ़ाइलों पर विचार करते हैं, तो मेरे जवाब के बाकी हिस्से को और अधिक समझ में आता है (शुरुआती परिदृश्य से वर्जित अंशों के पहले उपयोग के लिए प्रतिनिधि)।
इस पृष्ठ से सबसे अधिक उत्क्रमित उत्तर काम नहीं करेगा, यह है कि टैब किए गए अंशों के लिए डिफ़ॉल्ट कोड में, टुकड़ों का उपयोग किसी अन्य जावा वर्ग में किया जाता है: FragmentPagerAdapter!
इसलिए, डेटा भेजने के लिए, आपको उत्तर संख्या 2 का उपयोग करके MotherActivity में एक बंडल बनाने और FragmentPagerAdapter में इसे पास करने का प्रलोभन दिया जाता है।
केवल वही गलत है। ( संभवतः आप इसे ऐसा कर सकते थे, लेकिन यह सिर्फ एक जटिलता है जिसकी वास्तव में आवश्यकता नहीं है )।
ऐसा करने का सही / आसान तरीका, मुझे लगता है कि प्रश्न संख्या 2 का उपयोग करते हुए, डेटा को सीधे खंड में पास करना है। हां, वर्जित अंशों के लिए एक्टिविटी और फ्रैगमेंट, बीयूटी के बीच चुस्त युग्मन होगा, जो अपेक्षित है। मैं आपको मदरऐक्टिविटी जावा क्लास (सबक्लासेस के रूप में टेबल्स के टुकड़े बनाने की सलाह दूंगा, क्योंकि इनका इस्तेमाल कभी भी मदरऐक्टीविटी के बाहर नहीं किया जाएगा) - यह आसान है, बस कई फ्रैगमेंट्स के अंदर मदरऐक्टीविटी जावा क्लास में जोड़ें:
public static class Tab1 extends Fragment {
public Tab1() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.your_layout_name_for_fragment_1, container, false);
return rootView;
}
}.
इसलिए, मदरटिविटी से डेटा को इस तरह के फ्रैगमेंट में पास करने के लिए आपको अपनी माँ की गतिविधि के तहत निजी स्ट्रिंग्स / बंडलों को बनाने की आवश्यकता होगी - जिसे आप उस डेटा से भर सकते हैं जिसे आप टुकड़ों में पास करना चाहते हैं, और उनके माध्यम से पास करना चाहते हैं। onCreate के बाद बनाई गई विधि (यहाँ getMyData () कहा जाता है)।
public class MotherActivity extends Activity {
private String out;
private Bundle results;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mother_activity);
// for example get a value from the previous activity
Intent intent = getIntent();
out = intent.getExtras().getString("Key");
}
public Bundle getMyData() {
Bundle hm = new Bundle();
hm.putString("val1",out);
return hm;
}
}
और फिर टुकड़ा वर्ग में, आप getMyData का उपयोग करें:
public static class Tab1 extends Fragment {
/**
* The fragment argument representing the section number for this
* fragment.
*/
public Tab1() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.your_layout_name_for_fragment_1, container, false);
TextView output = (TextView)rootView.findViewById(R.id.your_id_for_a_text_view_within_the_layout);
MotherActivity activity = (MotherActivity)getActivity();
Bundle results = activity.getMyData();
String value1 = results.getString("val1");
output.setText(value1);
return rootView;
}
}
यदि आपके पास डेटाबेस के प्रश्न हैं, तो मैं आपको मदरएक्टिविटी में उन्हें करने की सलाह देता हूं (और उपरोक्त परिणाम के रूप में बंडल के अंदर कुंजियों से जुड़े स्ट्रिंग्स / इंटेगर के रूप में उनके परिणाम पास करें), जैसा कि टैब किए गए टुकड़ों के अंदर, आपका सिंटैक्स और अधिक जटिल हो जाएगा (यह getActivity हो जाता है) () उदाहरण के लिए, और getIntent getActivity ()। getIntent हो जाता है, लेकिन आपके पास अपनी इच्छानुसार करने का भी विकल्प है।
शुरुआती लोगों के लिए मेरी सलाह छोटे कदमों पर ध्यान केंद्रित करना है। सबसे पहले, किसी भी डेटा को पारित किए बिना, एक बहुत ही सरल टैब्ड गतिविधि को खोलने का अपना इरादा प्राप्त करें। क्या यह काम करता है? क्या यह आपके द्वारा अपेक्षित टैब को खोलता है? यदि नहीं, तो क्यों?
उससे शुरू करें, और इस क्लिप में प्रस्तुत किए गए समाधानों को लागू करके देखें कि क्या गायब है। उस विशेष क्लिप के लिए, mainactivity.xml कभी नहीं दिखाया गया है। वह निश्चित रूप से आपको भ्रमित करेगा। लेकिन अगर आप ध्यान देते हैं, तो आप देखेंगे कि उदाहरण के लिए संदर्भ (उपकरण: संदर्भ) xml टुकड़ा फ़ाइलों में गलत है। प्रत्येक टुकड़ा XML को सही टुकड़ा वर्ग (या विभाजक का उपयोग करके उपवर्ग) को इंगित करने की आवश्यकता होती है।
आप यह भी देखेंगे कि मुख्य गतिविधि जावा वर्ग में आपको tabLayout.setupWithViewPager (mViewPager) जोड़ने की आवश्यकता है - लाइन TabLayout tabLayout = (TabLayout) findViewyyId (R.id.tabs) के ठीक बाद; इस पंक्ति के बिना, आपका दृश्य वास्तव में टुकड़े की XML फ़ाइलों से जुड़ा नहीं है, लेकिन यह मुख्य गतिविधि का केवल xml फ़ाइल दिखाता है।
मुख्य गतिविधि जावा क्लास में लाइन के अलावा, मुख्य गतिविधि एक्सएमएल फ़ाइल में आपको अपनी स्थिति फिट करने के लिए टैब बदलने की आवश्यकता होती है (उदाहरण के लिए TabItems जोड़ें या निकालें)। यदि आपके पास मुख्य गतिविधि एक्सएमएल में टैब नहीं हैं, तो संभवतः आपने पहली बार में बनाई गई सही गतिविधि प्रकार का चयन नहीं किया (नई गतिविधि - टैब्ड गतिविधि)।
कृपया ध्यान दें कि पिछले 3 पैराग्राफ में मैं वीडियो के बारे में बात करता हूं! इसलिए जब मैं मुख्य गतिविधि XML कहता हूं, तो यह वीडियो में मुख्य गतिविधि XML है, जो आपकी स्थिति में MotherActivity XML फ़ाइल है।