दिलचस्प पोस्ट
मैं रेपो / प्रोजेक्ट में सिस्टम-विशिष्ट कॉन्फ़िग फाइल कैसे ट्रैक कर सकता हूं? मैं Chrome DevTools में एक तत्व पर चलाई गई घटनाओं को कैसे देखूं? JTextFields JPanel पर सक्रिय ड्राइंग के शीर्ष पर, थ्रेडिंग समस्याओं सामान्य प्रकार या पद्धति में पैरामीटर 'टी' के रूप में इसका उपयोग करने के लिए टाइप एक संदर्भ प्रकार होना चाहिए मैं कैसे सीपीयू में सीपीयू प्रोग्राम उत्पन्न कर सकता हूँ? क्या "(" ;;) "जबकि" (सच) "की तुलना में तेज़ है? यदि नहीं, तो लोग इसका उपयोग क्यों करते हैं? साधारण PHP SQL लॉगिन समस्या निवारण IPhone 5 + iOS6 यह तय करेगा कि कोई ऐप लेटबेक्स मोड में चलना चाहिए या नहीं क्या py2exe के कोई विकल्प हैं? मैं एक फ़ाइल में एक बहुरालीन पैटर्न कैसे खोज सकता हूं? संसाधित प्रक्रियाओं के भीतर से परिणाम सेट तक पहुंचे लेनदेन-SQL SQL सर्वर Google मानचित्र v3 जियोकोडिंग सर्वर-साइड क्रॉस ब्राउज़र सीएसएस ज़ूम के लिए पूर्ण शैलियों मशीन कहां है? कॉन्फ़िगर? संकेत 11 SIGSEGV दुर्घटना Android

टुकड़ा अंदर टुकड़ा

टुकड़े के अंदर टुकड़े पर काम करने के लिए मुझे मदद की ज़रूरत है, वास्तव में मुझे वापस बटन दबाकर समस्या का सामना करना पड़ रहा है आवेदन मुख्य स्क्रीन में बटन हैं और प्रत्येक बटन दृश्य पर नए टुकड़े (और वह टुकड़ा एक दूसरे टुकड़ा के अंदर होता है) के साथ बदलते हैं, बटन को दबाए हुए बटनोट 1 टुकड़े को दबाकर गतिशील रूप से जोड़ने / बदलकर टुकड़ा ठीक काम कर रहा है, वैसे ही होता है, लेकिन अगर मैं दबाता हूं बटन फिर से, एक अपवाद मिला:

"Duplicate id 0x7f05000a, tag null, or parent id 0x7f050009 with another fragment for com........ fragmentname" 

मतलब टुकड़ा या आंतरिक टुकड़े पहले से ही जोड़ रहे हैं और मैं उन्हें फिर से जोड़ने का प्रयास कर रहा हूं, किसी को भी पता है कि किसी भी समस्या के बिना टुकड़े के अंदर टुकड़े के साथ काम करना और आगे पीछे आगे बढ़ने के लिए, समर्थन के लिए धन्यवाद

मुख्य गतिविधि, जहां टुकड़े गतिशील जोड़ और प्रतिस्थापित किया जाता है।

  public class FragmentInsideFragmentTestActivity extends Activity { private Button button1; private Button button2; private Button button3; private Button button4; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button1 =(Button) this.findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { onButtonClick(view); } }); button2 =(Button) this.findViewById(R.id.button2); button2.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { onButtonClick(view); } }); button3 =(Button) this.findViewById(R.id.button3); button3.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { onButtonClick(view); } }); button4 =(Button) this.findViewById(R.id.button4); button4.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { onButtonClick(view); } }); } public void onButtonClick(View v) { Fragment fg; switch (v.getId()) { case R.id.button1: fg=FirstFragment.newInstance(); replaceFragment(fg); break; case R.id.button2: fg=SecondFragment.newInstance(); replaceFragment(fg); break; case R.id.button3: fg=FirstFragment.newInstance(); replaceFragment(fg); break; case R.id.button4: fg=SecondFragment.newInstance(); replaceFragment(fg); break; } } private void replaceFragment(Fragment newFragment) { FragmentTransaction trasection = getFragmentManager().beginTransaction(); if(!newFragment.isAdded()){ try{ //FragmentTransaction trasection = getFragmentManager().beginTransaction(); trasection.replace(R.id.linearLayout2, newFragment); trasection.addToBackStack(null); trasection.commit(); }catch (Exception e) { // TODO: handle exception //AppConstants.printLog(e.getMessage()); } }else trasection.show(newFragment); } } 

यहां लेआउट है: main.xml

  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:id="@+id/button1" android:layout_height="wrap_content" android:text="Button1"></Button> <Button android:text="Button2" android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Button3" android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Button4" android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </LinearLayout> <LinearLayout android:id="@+id/linearLayout2" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"></LinearLayout> </LinearLayout> 

आशा है कि मैंने अपनी समस्या को साफ करने की कोशिश की

वेब के समाधान से एकत्रित समाधान "टुकड़ा अंदर टुकड़ा"

AFAIK, टुकड़े दूसरे टुकड़े नहीं रख सकते हैं


अद्यतन करें

एंड्रॉइड सपोर्ट पैकेज के वर्तमान संस्करण के साथ – या एपीआई स्तर 17 और उससे अधिक के मूल टुकड़े – आप घुटने के टुकड़े प्राप्त कर सकते हैं, getChildFragmentManager() माध्यम से। ध्यान दें कि इसका मतलब है कि आपको एपीआई स्तर 11-16 के टुकड़ों के एंड्रॉइड सपोर्ट पैकेज संस्करण का उपयोग करने की आवश्यकता है, क्योंकि इन डिवाइसों के टुकड़े के मूल संस्करण के बावजूद, उस संस्करण में getChildFragmentManager() नहीं मिलता है

चूंकि एंड्रॉइड 4.2 (एपीआई 17) नेस्टेड टुकड़े उपलब्ध हैं http://developer.android.com/about/versions/android-4.2.html#NestedFragments

टुकड़ा को दूसरे टुकड़ों के अंदर रखने के लिए getChildFragmentManager ()

यह सहायता लाइब्रेरी में भी उपलब्ध है!

यहां छवि विवरण दर्ज करें

मुझे कुछ और संदर्भ की आवश्यकता है, इसलिए मैंने यह दिखाया है कि यह कैसे किया जाता है। तैयारी करते समय मैंने सबसे उपयोगी बात यह थी:

  • टुकड़े बनाना और उनका उपयोग करना

गतिविधि

activity_main.xml

पैरेंट टुकड़ा को पकड़ने के लिए अपनी गतिविधि में एक FrameLayout जोड़ें।

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Activity"/> <FrameLayout android:id="@+id/parent_fragment_container" android:layout_width="match_parent" android:layout_height="200dp"/> </LinearLayout> 

MainActivity.java

पैरेंट टुकड़ा लोड करें और टुकड़ा श्रोताओं को लागू करें ( टुकड़ा संचार देखें।)

 import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; public class MainActivity extends AppCompatActivity implements ParentFragment.OnFragmentInteractionListener, ChildFragment.OnFragmentInteractionListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Begin the transaction FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.parent_fragment_container, new ParentFragment()); ft.commit(); } @Override public void messageFromParentFragment(Uri uri) { Log.i("TAG", "received communication from parent fragment"); } @Override public void messageFromChildFragment(Uri uri) { Log.i("TAG", "received communication from child fragment"); } } 

अभिभावक के टुकड़े

fragment_parent.xml

बच्चे के टुकड़े के लिए एक और FrameLayout कंटेनर जोड़ें।

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="20dp" android:background="#91d0c2"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Parent fragment"/> <FrameLayout android:id="@+id/child_fragment_container" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout> </LinearLayout> 

ParentFragment.java

बच्चे के टुकड़े को सेट करने के लिए onViewCreated में getChildFragmentManager का उपयोग करें।

 import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; public class ParentFragment extends Fragment { private OnFragmentInteractionListener mListener; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_parent, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { Fragment childFragment = new ChildFragment(); FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); transaction.replace(R.id.child_fragment_container, childFragment).commit(); } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof OnFragmentInteractionListener) { mListener = (OnFragmentInteractionListener) context; } else { throw new RuntimeException(context.toString() + " must implement OnFragmentInteractionListener"); } } @Override public void onDetach() { super.onDetach(); mListener = null; } public interface OnFragmentInteractionListener { // TODO: Update argument type and name void messageFromParentFragment(Uri uri); } } 

बाल टुकड़ा

fragment_child.xml

यहां कुछ विशेष नहीं है

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="20dp" android:background="#f1ff91"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Child fragment"/> </LinearLayout> 

ChildFragment.java

यहां कुछ भी विशेष नहीं है, या तो

 import android.support.v4.app.Fragment; public class ChildFragment extends Fragment { private OnFragmentInteractionListener mListener; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_child, container, false); } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof OnFragmentInteractionListener) { mListener = (OnFragmentInteractionListener) context; } else { throw new RuntimeException(context.toString() + " must implement OnFragmentInteractionListener"); } } @Override public void onDetach() { super.onDetach(); mListener = null; } public interface OnFragmentInteractionListener { // TODO: Update argument type and name void messageFromChildFragment(Uri uri); } } 

टिप्पणियाँ

  • समर्थन लाइब्रेरी का उपयोग किया जा रहा है ताकि एंड्रॉइड 4.2 से पहले नेस्टेड टुकड़े उपयोग किया जा सके।

टुकड़ों को दूसरे टुकड़ों के अंदर जोड़ा जा सकता है लेकिन फिर जब आप माता-पिता के टुकड़े के डायस्टरायव्यू () विधि को कहते हैं, तो हर बार इसे मूल अभिभावक से निकालना होगा। और फिर इसे पेरेंट फ्रैग्मेंट की ऑनक्रेटिव्यू () विधि में जोड़ दें

बस ऐसा करें:

 @Override public void onDestroyView() { FragmentManager mFragmentMgr= getFragmentManager(); FragmentTransaction mTransaction = mFragmentMgr.beginTransaction(); Fragment childFragment =mFragmentMgr.findFragmentByTag("qa_fragment") mTransaction.remove(childFragment); mTransaction.commit(); super.onDestroyView(); } 

मैंने इस समस्या का समाधान किया आप सहायता पुस्तकालय और ViewPager उपयोग कर सकते हैं यदि आपको इशारे से स्वाइप करने की आवश्यकता नहीं है, तो आप स्वाइपिंग अक्षम कर सकते हैं। तो मेरे समाधान में सुधार करने के लिए कुछ कोड है:

 public class TestFragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.frag, container, false); final ArrayList<Fragment> list = new ArrayList<Fragment>(); list.add(new TrFrag()); list.add(new TrFrag()); list.add(new TrFrag()); ViewPager pager = (ViewPager) v.findViewById(R.id.pager); pager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) { @Override public Fragment getItem(int i) { return list.get(i); } @Override public int getCount() { return list.size(); } }); return v; } } 

PSIt परीक्षण के लिए बदसूरत कोड है, लेकिन यह सुधार करता है कि यह संभव है।

पी पी एस के अंदर ChildFragmentManager को ViewPagerAdapter पास ChildFragmentManager जाना चाहिए

आप FrameLayout को टुकड़े को जोड़ सकते हैं और इसे दूसरे टुकड़े के साथ बदल सकते हैं जब यह आरंभ होता है

इस तरह, आप दूसरे टुकड़े को पहले टुकड़े के अंदर मान सकते हैं।

आप getChildFragmentManager() फ़ंक्शन का उपयोग कर सकते हैं।

उदाहरण:

जनक टुकड़ा:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.parent_fragment, container, false); } //child fragment FragmentManager childFragMan = getChildFragmentManager(); FragmentTransaction childFragTrans = childFragMan.beginTransaction(); ChildFragment fragB = new ChildFragment (); childFragTrans.add(R.id.FRAGMENT_PLACEHOLDER, fragB); childFragTrans.addToBackStack("B"); childFragTrans.commit(); return rootView; } 

अभिभावक लेआउट ( parent_fragment.xml ):

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white"> <FrameLayout android:id="@+id/FRAGMENT_PLACEHOLDER" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout> 

बाल टुकड़ा:

 public class ChildFragment extends Fragment implements View.OnClickListener{ View v ; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // TODO Auto-generated method stub View rootView = inflater.inflate(R.layout.child_fragment, container, false); v = rootView; return rootView; } @Override public void onClick(View view) { } } 

GetChildFragmentManager () का उपयोग करें, लिंक का अनुसरण करें: नेस्टेड टुकड़ा

मैपफ्रैग्मेंट के लिए कोई समर्थन नहीं है, एंड्रॉइड टीम कहती है कि यह एंड्रॉइड 3.0 के बाद से काम कर रहा है। इस मुद्दे के बारे में यहां अधिक जानकारी http://code.google.com/p/android/issues/detail?id=15347&utm_source=buffer&buffer_share=acc72 लेकिन एक ऐसा टुकड़ा बनाकर आप क्या कर सकते हैं जो कि मानचित्रएक्टिविटी देता है यहां एक कोड उदाहरण है। इनजरुक के लिए धन्यवाद: https://github.com/inazaruk/examples/tree/master/MapFragmentExample

यह काम किस प्रकार करता है:

-मैनफ्रैगमेंट ऐक्टिविटी एक ऐसी गतिविधि है जो फ्रैगमेंट ऐक्टिविटी बढ़ाती है और दो मैपफ्रैगमेंट्स को होस्ट करती है। -मेमापैक्टिविटी मैपएक्टिविटी बढ़ाती है और नक्शादृश्य है। -लोकलएक्टिविटीमैनैजरफ्रैग्मेंट मेजबान स्थानीयएक्टिवैविया प्रबंधक -MyMapFragment LocalActivityManagerFragment को बढ़ाता है और TabHost की मदद से MyMapActivity का आंतरिक उदाहरण बनाता है अगर आपको कोई संदेह है तो कृपया मुझे बताएं

नेस्टेड टुकड़े में क्रूर रूप से, नेस्टेड एक (एस) केवल अगर वे कार्यक्रम के रूप में तैयार कर रहे हैं समर्थित हैं! इसलिए इस समय कोई नेस्टेड टुकड़ा लेआउट xml लेआउट स्कीम में समर्थित नहीं है!

इसकी कुछ भी जटिल नहीं है हम यहां GetFragmentManager () का उपयोग नहीं कर सकते एक टुकड़े के अंदर टुकड़ों का उपयोग करने के लिए, हम getChildFragmentManager () का उपयोग करें। बाकी एक समान होगी

नमस्ते, मैंने इस समस्या को अलग-अलग लेआउट में प्रति टुकड़ा लगाकर सुलझाया। और मैंने सिर्फ संबंधित लेआउट को दिखाई दिया और दूसरों को चले गए दृश्यताएं बनाईं।

मेरा मतलब:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:id="@+id/button1" android:layout_height="wrap_content" android:text="Button1"></Button> <Button android:text="Button2" android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Button3" android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Button4" android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </LinearLayout> <LinearLayout android:layout_width="full_screen" android:layout_height="0dp" android:layout_weight="1" android:id="action_For_Button1" android:visibility="visible"> <Fragment android:layout_width="full_screen" android:layout_height="full_screen" android:id="fragment1" . . . / > </LinearLayout> <LinearLayout android:layout_width="full_screen" android:layout_height="0dp" android:id="action_For_Button1" android:layout_weight="1" android:visibility="gone"> <Fragment android:layout_width="full_screen" android:layout_height="full_screen" android:id="fragment2" . . . / > </LinearLayout> . . . </LinearLayout> 

मुझे लगता है कि आप अपना पेज खोलेंगे क्योंकि बटन 1 क्लिक किया गया है.आप क्लिक करें कार्रवाई पर अपने टुकड़े की दृश्यता को नियंत्रित कर सकते हैं। आप संबंधित लेआउट को दृश्यमान बना सकते हैं और अन्य लोग चले गए हैं और टुकड़ा प्रबंधक द्वारा आप अपना टुकड़ा ले सकते हैं। यह दृष्टिकोण मेरे लिए काम किया है। और देखने के बाद कि दृश्यता है: चला गया अदृश्य है, और यह लेआउट प्रयोजनों के लिए कोई स्थान नहीं लेता है मुझे लगता है कि यह दृष्टिकोण किसी भी स्थान की समस्या का कारण नहीं है।

पुनश्च: मैंने बस अपने समाधान कोड को समझाने की कोशिश की, वाक्यविन्यास गलतियों या अपूर्ण संरचना हो सकती है।