लोड नहीं करता है मेरे पास मुख्य टैबएक्टिविटी है जिसमें दो टैब, ए और बी (अभी के लिए) हैं। टैब ए एक फ्रैगमेंट एक्टिविटी (नीचे दिया गया कोड) लोड करता है जो सिर्फ FrameLayout
को संगत करता है, इसलिए मैं उस विशिष्ट टैब के लिए अपने टुकड़े लोड कर सकता हूं।FragmentManager.popBackStack() केवल पिछले Fragment
पहली फ्रैगमेंट में कुछ टेक्स्ट व्यू और एक ListView है। डेटा एक वेब सेवा से खींचा जाता है। जब मैं किसी सूची दृश्य आइटम पर क्लिक करता हूं, तो मैं उस आइटम के विवरण को किसी अन्य खंड में लोड करता हूं (यह एक वेब सेवा से भी आता है) और वर्तमान विवरण (सूची दृश्य और अन्य नियंत्रणों के साथ) को एक और विस्तार खंड के साथ प्रतिस्थापित करें।
इसे प्राप्त करने के लिए, मैं एंड्रॉइड-सपोर्ट-v4.jar लाइब्रेरी का उपयोग करके फ्रैगमेंट्स को पसंद करने के लिए उपयोग कर रहा हूं।
टैब ए के FragmentActivity के XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/updates_frame"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background"/>
</LinearLayout>
टैब ए के FragmentActivity जावा कोड:
public void onFeedSelected(Feed feed);
public void onBackPressed();
:
public class UpdatesFragmentActivity extends FragmentActivity implements
IUpdateNotifier {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.updates);
//Load Initial Fragment into FrameLayout
//I am adding this Fragment to BackStack
Fragment newFragment = new UpdatesFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.addToBackStack(null);
ft.add(R.id.updates_frame, newFragment);
ft.commit();
}
//This is an Interface method which I call with the clicked "FEED" object to load its detail in another Fragment
@Override
public void onFeedSelected(Feed feed) {
// Instantiate a new fragment.
Fragment newFragment = new FeedDetailFragment(feed);
// Add the fragment to the activity, pushing this transaction
// on to the back stack.
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.updates_frame, newFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
//This is another Interface Method which I call when the user presses "BACK".
//I am trying to load the previously loaded Fragment, which I added to BackStack.
//But this causes reconstruction of the previously loaded fragment. LIST in this case
//which call the web service. I DONT WANT TO CALL SERVICE AGAIN.
@Override
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
}
}
}
मैं एक अंतरफलक IUpdateNotifier है, जो दो तरीकों में शामिल है बनाया है अभिभावक अपडेट्स फ्रैगमेंट एक्टिविटी इन तरीकों को लागू करता है। मैं निम्नलिखित विधियों पर बच्चों के टुकड़ों से इन तरीकों को बुलाता हूं।
- मैं टुकड़ा है जो एक ListView है से onFeedSelected (फ़ीड फ़ीड) कहते हैं। मैं क्लिकेड फीड आइटम को मूल फ्रैगमेंट एक्टिविटी में भेजता हूं, इसलिए यह एक और टुकड़ा लोड करता है जिसमें उस फ़ीड विवरण शामिल होता है।
- मैं पर कॉल करता हूं बैकप्रेस() दूसरी फ़ीड विवरण से फ्रैगमेंट जब उपयोगकर्ता एक बटन दबाता है जिसे पहले खंड को वापस लाने के लिए माना जाता है जिसमें अन्य नियंत्रणों के साथ ListView शामिल होता है। आप देख सकते हैं, मुझे लगता है कि पहले टुकड़ा वापस लाने के लिए FragmentManager के popBackStack() विधि कॉल करने के लिए प्रयास करें ...
लेकिन पहले टुकड़ा ताजा हो जाता है और वेब सेवा से लोड सभी डेटा।
असल में मैं केवल एक बार डेटा प्राप्त नहीं कर सकता और न ही कुछ समय अंतराल पर अपडेट अक्सर होता हूं। उपयोगकर्ता जब चाहें सूची को अपडेट कर सकता है। प्रारंभ में, सूची सेवा से शीर्ष 10 आइटम लोड करती है, और फिर उपयोगकर्ता सूची के अंत में "अधिक" बटन पर क्लिक कर सकता है यदि वह अधिक आइटम लोड करना चाहता है।
यह अगले 10 आइटम लोड करेगा और इसी तरह। लेकिन मुझे लगता है कि मैं कुछ चर में अपडेट्स फ्रैगमेंट एक्टिविटी में पुनर्प्राप्त ArrayList को स्टोर कर सकता हूं और फिर उस सेवा को डेटा लोड करने के बजाय सूची के एडाप्टर में केवल ऐरेलिस्ट को फिर से सौंप सकता हूं, लेकिन मुझे नहीं पता कि फ्रैगमेंट को सेवा को फिर से कॉल नहीं करना है।
मैं चाहता हूं कि जब मैं टैब 2 पर क्लिक करता हूं और फिर टैब 1 पर फिर से व्यवहार करता हूं। यह केवल लोड किए गए डेटा को दिखाता है जैसे कि छुपा हुआ था और सेवा को कॉल नहीं करता है।
मैं इसे कैसे प्राप्त कर सकता हूं?
क्या आपको कोई समाधान मिला –