दिलचस्प पोस्ट
उल्का में ग्लोबल वैरिएबल क्या मुझे अपना उप प्रक्रिया से बाहर निकलने से पहले कूटकापीमोड वापस करना चाहिए? कैसे textarea से शब्द लपेटो निकालें? धागा अवधारणा समझ पर चिंगारी WPF में वर्तमान स्क्रीन के आकार को कैसे प्राप्त करें? Uncaught TypeError: अपरिभाषित – 'jQuery उपकरण' की संपत्ति 'एमएसआई' पढ़ नहीं सकते जावा का उपयोग करके सिस्टम कमांड्स (लिनक्स / बीएसडी) कैसे निष्पादित करें I JqGrid फॉर्म के साथ बूटस्ट्रैप select2 का उपयोग करना आप सुनिश्चित करें कि WPF मेमोरी से बड़े बिटमैप स्रोत को रिलीज़ करते हैं? Gmail 5.0 एप विफल रहता है जब "ACTION_SEND इरादे प्राप्त होने पर" अनुलग्नक के लिए अनुमति अस्वीकृत हो जाती है " चींटी जावैक में जावा का लक्ष्य संस्करण निर्धारित करना Google मानचित्र जावास्क्रिप्ट जीओकोडर से मैं एक अक्षांश और अक्षांश कैसे वापस करूँ? जावा में एक एफएसएम – परिमित राज्य मशीन को कैसे कार्यान्वित करें कैसेंड्रा – सहेजे गए क्लस्टर नाम टेस्ट क्लस्टर! = कॉन्फ़िगर नाम D3 के JSON प्रारूप में कन्वर्ट करने के लिए कैसे?

एंड्रॉइड – टुकड़ा .replace () सामग्री को प्रतिस्थापित नहीं करता है – इसे शीर्ष पर डालता है

गतिविधि:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); Fragment1 fragment = new Fragment1(); Fragment2 fragment2 = new Fragment2(); transaction.replace(R.id.Fragment1, fragment); transaction.addToBackStack(null); transaction.commit(); FragmentTransaction transaction2 = getSupportFragmentManager().beginTransaction(); transaction2.replace(R.id.Fragment1, fragment2); transaction2.addToBackStack(null); transaction2.commit(); 

दृश्य में कोड:

 <fragment android:id="@+id/Fragment1" android:name="com.landa.fragment.Fragment1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_below="@+id/include1" /> 

समस्या यह है, सामग्री सचमुच प्रतिस्थापित नहीं होती – यह शीर्ष पर डाल दी जाती है (इसलिए यह ओवरलैप)।

जब मैं वापस पर क्लिक करता हूं, पहला टुकड़ा ठीक से दिखाया जाता है (दूसरे के बिना), लेकिन शुरू में दोनों दिखाई दे रहे हैं (मैं केवल अंतिम एक को दिखाई देने वाला चाहता हूं)।

मुझे यहां क्या समझ नहीं आ रहा है?

Solutions Collecting From Web of "एंड्रॉइड – टुकड़ा .replace () सामग्री को प्रतिस्थापित नहीं करता है – इसे शीर्ष पर डालता है"

आप दो चीजों को गलत कर रहे हैं:

  1. आप उस टुकड को प्रतिस्थापित नहीं कर सकते जो कि एक xml लेआउट फाइल में स्थिर रूप से रखा गया है। आपको लेआउट में एक कंटेनर (जैसे FrameLayout लेआउट) बनाना चाहिए और फिर FragmentTransaction ट्रांसजनक्शन का उपयोग करके प्रोग्राम को व्यवस्थित रूप से जोड़ें।

  2. FragmentTransaction.replace उस कंटेनर के आईडी की अपेक्षा करता है जिसमें टुकड़ा होता है और खंड का आईडी पहले पैरामीटर के रूप में नहीं है। तो आपको पहले तर्क को कंटेनर के आईडी के रूप में देना चाहिए, जिसमें आपने पहले खंड को जोड़ा था।

अधिक जानकारी के लिए आप इस लिंक को संदर्भित कर सकते हैं।

मुझे एक ऐसी समस्या थी, लेकिन मेरा मुद्दा यह था कि मैं दो अलग टुकड़े प्रबंधकों का उपयोग कर रहा था: GetSupportFragmentManager () से एक और getFragmentManager () से एक। अगर मैंने SupportFragmentManager के साथ एक टुकड़ा जोड़ा और फिर टुकड़े को टुकड़े टुकड़े को स्थानांतरित करने की कोशिश की तो टुकड़ा सिर्फ शीर्ष पर जोड़ा जाएगा मुझे कोड को बदलने की आवश्यकता है ताकि एक ही टुकड़ा संयोजक का इस्तेमाल किया जा सके और इस मुद्दे का ध्यान रखा।

एंड्रॉइड डेवलपर साइट रन-टाइम पर गतिशील रूप से टुकड़े लोड करने के लिए FrameLayout का उपयोग करने का सुझाव देती है। आपने अपने xml फ़ाइल में टुकड़े को कड़ी मेहनत से किया है इसलिए इसे रन-टाइम पर नहीं हटाया जा सकता है जैसा कि इस लिंक में उल्लिखित है:

http://developer.android.com/training/basics/fragments/creating.html

यह लिंक आपके प्रोग्राम के माध्यम से टुकड़ों को जोड़ने का तरीका दिखाता है:

http://developer.android.com/training/basics/fragments/fragment-ui.html

टुकड़े को बदलने से पहले आप वापस स्टेक को साफ़ कर सकते हैं:

  FragmentManager fm = getActivity().getSupportFragmentManager(); for (int i = 0; i < fm.getBackStackEntryCount(); i++) { fm.popBackStack(); } // replace your fragments 

मेरे पास एक ही समस्या थी और मैंने सभी उत्तर देखा, लेकिन उनमें से कोई भी मेरी गलती नहीं हुई! वर्तमान टुकड़ा को बदलने की कोशिश करने से पहले, मैं इस तरह के कंटेनर गतिविधि के XML में डिफ़ॉल्ट टुकड़ा दिखा रहा था:

 <FrameLayout android:id="@+id/fragment_frame_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:layout_width="match_parent" android:layout_height="match_parent" android:name="....ShopFragment" android:id="@+id/fragment" tools:layout="@layout/fragment_shop" /> </FrameLayout> 

इसके बाद भी मैं फ्रेम पारित कर रहा था हालांकि टुकड़ा करने के लिए लेआउट Transaction.replace (), लेकिन मैं सटीक समस्या थी। यह पिछले एक के शीर्ष पर दूसरा टुकड़ा दिखा रहा था

इस समस्या को एक्सएमएल से निकालकर और कार्यक्रम की शुरूआत पर डिफॉल्ट पूर्वावलोकन के लिए कंटेनर गतिविधि की onCreate () पद्धति में प्रोग्राममैटिक रूप से प्रदर्शित करके तय किया गया है:

  fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.fragment_frame_layout,new ShopFragment()); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); 

और कंटेनर गतिविधि xml:

 <FrameLayout android:id="@+id/fragment_frame_layout" android:layout_width="match_parent" android:layout_height="match_parent"> 

मैं सपन दीवाकर के जवाब से सहमत हूं। लेकिन मुझे यह कैसे करना है पर एक वैकल्पिक हल मिल गया है।

सबसे पहले, आपकी गतिविधि में (जैसे activity_main ), जहां आपके पास सभी लेआउट हैं, एक FrameLayout लेआउट जोड़ें। यह ऊंचाई और चौड़ाई match parent होना चाहिए। साथ ही, इसे एक id

अब, आपके टुकड़े में जो वर्तमान लेआउट को बदलने वाला है, पर कॉल करें onPause() और onResume()View में सभी सभी आंतरिक कंटेनरों को आरंभ करें और उनकी visibility को onResume() में onResume() और onResume() में onResume() onPause()

नोट : FrameLayout नहीं है जो आप इस टुकड़े के साथ बदल रहे हैं।

मान लीजिए आपके पास ViewPager , TabLayout , TabLayout और एक कस्टम <fragment> activity_main.xml । जोड़ें, एक FrameLayout जो ऊपर उल्लेखित है।

abcFragment.java , onClick() फ़ंक्शन में, transaction में addToBackstack(null) जोड़ें

उदाहरण कोड:

xyzFragment में, जो abcFragment (और activity_main.xml में दिखाया गया सब कुछ) को बदलने वाला है, ऐसा करें

 @Override public void onResume() { super.onResume(); // On resume, make everything in activity_main invisible except this fragment. slidingTabs = getActivity().findViewById(R.id.sliding_tabs); viewPager = getActivity().findViewById(R.id.pager); miniPlayerFragment = getActivity().findViewById(R.id.mini_pager); slidingTabs.setVisibility(View.GONE); viewPager.setVisibility(View.GONE); miniPlayerFragment.setVisibility(View.GONE); } @Override public void onPause() { super.onPause(); // Make everything visible again slidingTabs = getActivity().findViewById(R.id.sliding_tabs); viewPager = getActivity().findViewById(R.id.pager); miniPlayerFragment = getActivity().findViewById(R.id.mini_pager); slidingTabs.setVisibility(View.VISIBLE); viewPager.setVisibility(View.VISIBLE); miniPlayerFragment.setVisibility(View.VISIBLE); } 

हैप्पी कोडिंग!

सपन दीवाकर और अन्य लोगों के लिए धन्यवाद। इस उत्तर ने मेरी मदद की मैंने एक रिलेटिव लेआउट को बिना किसी टुकड़े के बिना बनाया, रिश्तेदार लेआउट को एक अभिभावक या समूह दृश्य के रूप में इस्तेमाल किया, उस समूह को बदलने के लिए लेन-देन में निर्दिष्ट किया गया, और यह काम किया।

कोड: getSupportFragmentManager ()। BeginTransaction () .replace (R.id.content_group_view, itemDetailFragment) .commit ();

लेआउट:

  <RelativeLayout android:id="@+id/content_group_view" android:layout_width="match_parent" android:layout_height="match_parent" </RelativeLayout> 

खंड का उपयोग करने के बजाय कंटेनर का उपयोग करें

 <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:text="Hello World!" /> 

अब मुख्य गतिविधि में

 if(condition) getFragmentManager().beginTransaction().replace(R.id.container,new FirstFragment()).commit(); else getFragmentManager().beginTransaction().replace(R.id.container, new SecondFragment()).commit(); 

कृपया ध्यान दें कि आपका टुकड़ा वर्ग 'android.app.Fragment' आयात करना चाहिए, सुनिश्चित करें कि आप "support.v4" या "मूल" कार्यान्वयन का उपयोग करते हैं और उन्हें मिश्रण नहीं करते हैं मुझे यह समस्या हो रही थी क्योंकि मैंने उन्हें मिश्रित किया था।

ओवरलैपिंग समस्या को ठीक करने के लिए आप FragmentTransaction से setTransition विधि का उपयोग कर सकते हैं।

 transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 

ओक्रेट में ()

  BaseFragmentloginpage fragment = new BaseFragmentloginpage(); android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.frame, fragment); fragmentTransaction.isAddToBackStackAllowed(); fragmentTransaction.commit(); 

अब यह हमेशा आपका डिफ़ॉल्ट टुकड़ा होगा … यदि आप एक्सएमएल लेआउट में टुकड़ा जोड़ते हैं तो यह हमेशा ओवरलैप होता है, इसलिए आरंभ समय पर टुकड़ा के साथ प्रारंभिक सामग्री सेट करें

इस समस्या का हल करने के बाद मुझे एक ही समस्या थी

  1. फ़्रेम लेआउट लें जहां आप उर टुकड़ा बदल रहे हैं

     <FrameLayout android:id="@+id/fragment_place" android:layout_width="match_parent" android:layout_height="match_parent" /> 
  2. और प्रतिस्थापन के लिए कोड

     public void selectFrag(View view) { Fragment fr; if(view == findViewById(R.id.button2)) { fr = new FragmentTwo(); }else { fr = new FragmentOne(); } FragmentManager fm = getFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); fragmentTransaction.replace(R.id.fragment_place, fr); fragmentTransaction.commit(); 

अगर आप पूरी तरह से उदाहरण चाहते हैं तो मैं आपको भेजूंगा ……