जिस तरह से एंड्रॉइड टुकड़ा बैकस्टैक काम करने लगता है उसके साथ मुझे एक बड़ी समस्या हो गई है और जो भी मदद की पेशकश की जाती है उसके लिए सबसे आभारी होंगे।
कल्पना कीजिए कि आपके पास 3 टुकड़े हैं
[1] [2] [3]
मैं चाहता हूं कि उपयोगकर्ता नेविगेट करने में सक्षम हो [1] > [2] > [3]
लेकिन रास्ते में वापस (बैक बटन दबाकर) [3] > [1]
।
जैसा कि मैंने कल्पना की थी कि यह उस समय तक पूरा नहीं होगा addToBackStack(..)
जब खंडित होने वाले लेनदेन का निर्माण किया जाएगा[2]
XML में परिभाषित अंश धारक में लाने वाले ।
इस की वास्तविकता के रूप में लगता है कि अगर मैं [2]
फिर से प्रकट नहीं करना चाहता हूं जब उपयोगकर्ता वापस बटन दबाता है [3]
, तो मुझे addToBackStack
लेन-देन में कॉल नहीं करना चाहिए: यह टुकड़ा दिखाता है[3]
। यह पूरी तरह से काउंटर-सहज ज्ञान युक्त है (शायद आईओएस दुनिया से आता है)।
वैसे भी अगर मैं इसे इस तरह से करता हूं, जब मैं से [1] > [2]
जाता हूं और वापस दबाता हूं तो मैं वापस आ जाता हूं[1]
उम्मीद के ।
अगर मैं जाता हूं [1] > [2] > [3]
और फिर वापस दबाता हूं तो मैं वापस कूद जाता हूं [1]
(उम्मीद के मुताबिक)। अब अजीब व्यवहार तब होता है जब मैं कोशिश करता हूं और [2]
फिर से कूद जाता हूं [1]
। देखने में आने [3]
से पहले सबसे पहले इसे संक्षेप में प्रदर्शित किया [2]
जाता है। यदि मैं इस बिंदु पर वापस प्रेस करता हूं [3]
, और यदि मैं एक बार फिर से वापस आता हूं तो ऐप बाहर निकल जाता है।
क्या कोई मुझे समझने में मदद कर सकता है कि यहाँ क्या चल रहा है?
और यहाँ मेरी मुख्य गतिविधि के लिए लेआउट 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" >
<fragment
android:id="@+id/headerFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
class="com.fragment_test.FragmentControls" >
<!-- Preview: layout=@layout/details -->
</fragment>
<FrameLayout
android:id="@+id/detailFragment"
android:layout_width="match_parent"
android:layout_height="fill_parent"
/>
अपडेट यह वह कोड है जिसका उपयोग मैं नव उत्तराधिकारियों द्वारा बनाने के लिए कर रहा हूं
Fragment frag;
FragmentTransaction transaction;
//Create The first fragment [1], add it to the view, BUT Dont add the transaction to the backstack
frag = new Fragment1();
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detailFragment, frag);
transaction.commit();
//Create the second [2] fragment, add it to the view and add the transaction that replaces the first fragment to the backstack
frag = new Fragment2();
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detailFragment, frag);
transaction.addToBackStack(null);
transaction.commit();
//Create third fragment, Dont add this transaction to the backstack, because we dont want to go back to [2]
frag = new Fragment3();
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detailFragment, frag);
transaction.commit();
//END OF SETUP CODE-------------------------
//NOW:
//Press back once and then issue the following code:
frag = new Fragment2();
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detailFragment, frag);
transaction.addToBackStack(null);
transaction.commit();
//Now press back again and you end up at fragment [3] not [1]
बहुत धन्यवाद