6

वर्तमान में मुझे एक "RELATIVE_LAYOUT" कंटेनर मिला है जिसका मैं अपना टुकड़ा जोड़ने के लिए उपयोग कर रहा हूं। मैं रिलेवेटलाइट कंटेनर में खंड एक्सएमएल लेआउट को लोड करने के लिए ऑनक्लिक लिस्टनर का उपयोग कर रहा हूं।बटन पर फ्रैगमेंट जोड़ने/निकालने के लिए कैसे क्लिक करें?

जो मैं प्राप्त करना चाहता हूं वह यह है कि जब मैं एक बार बटन दबाता हूं, तो टुकड़ा लोड होना चाहिए ... और जब मैं इसे फिर से दबाता हूं तो टुकड़ा हटा दिया जाना चाहिए। मैं पहले से ही पूर्णांक का उपयोग करने की कोशिश कर रहा हूं यह पहचानने के लिए कि क्या टुकड़ा लोड किया गया है, लेकिन असफल रहा। किसी भी मदद की सराहना की ...

कोड:

public class MainActivity extends Activity { 
    Button B1,B2; 
    int boolb1=0, boolb2=0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     B1 = (Button)findViewById(R.id.btn1); 
     B2 = (Button)findViewById(R.id.btn2); 

     B1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       FragmentManager fm = getFragmentManager(); 
       FragmentTransaction ft = fm.beginTransaction(); 
       FragmentOne f1 = new FragmentOne(); 

       if(boolb1==0) 
       {ft.add(R.id.frg1, f1); 
       ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
       boolb1=1;} 
       else 
       {ft.remove(f1); 
       ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); 
       boolb1=0;} 
       //ft.addToBackStack("f1"); 
       ft.commit(); 
      } 
     }); 

     B2.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       FragmentManager fm = getFragmentManager(); 
       FragmentTransaction ft = fm.beginTransaction(); 
       FragmentTwo f2 = new FragmentTwo(); 

       if(boolb2==0) { 
        ft.add(R.id.frg2, f2); 
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
        boolb2=1; 
       } else { 
        ft.remove(f2); 
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); 
        boolb2=0; 
       } 

       //ft.addToBackStack("f2"); 
       ft.commit(); 
      } 
     }); 
    } 

उत्तर

12

आपका मुद्दा है कि आप एक नयाFragment हर आप Button क्लिक करें बनाने । आपको को वर्तमान मेंFragment का संदर्भ प्राप्त करने की आवश्यकता है और फिर उसे हटा दें।

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

यहाँ कैसे आप इसे क्या करना चाहिए का एक उदाहरण है:

private Button B1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    B1 = (Button)findViewById(R.id.btn1); 

    B1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      FragmentManager fm = getFragmentManager(); 
      FragmentTransaction ft = fm.beginTransaction(); 
      FragmentOne f = (FragmentOne) fm.findFragmentByTag("tag"); 

      if(f == null) { // not added 
       f = new FragmentOne(); 
       ft.add(R.id.frg1, f, "tag"); 
       ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 

      } else { // already added 

       ft.remove(f); 
       ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); 
      } 

      ft.commit(); 
     } 
    }); 

    // and so on ... 
} 
+0

हाँ, मैं सिर्फ जोड़ना होगा कि बेहतर दृष्टिकोण पूरी तरह से दूर करने के लिए है चर "जोड़ा" और बस टुकड़ा प्रबंधक में टुकड़े की presention द्वारा तय .. उस स्थिति में आपको स्क्रीन – Billda

+0

के घूर्णन के बाद राज्य को बहाल करने के साथ कम काम होगा। आप सही हैं, मैंने कोड समायोजित किया है :) –

+0

उत्कृष्ट उत्तर ... एक संदेह हालांकि, पहली बार जब मैं बटन दबाता हूं, जावा एक वस्तु बनाता है FragmentOne f1 और इसे फ्रेगमेंटबेटाग द्वारा लौटाए गए मान को पास करता है, लेकिन टैग "टैग" अभी तक किसी भी टुकड़े से जुड़ा हुआ नहीं है क्योंकि हम उस ब्लॉक में करते हैं। तो, क्या कोई त्रुटि उत्पन्न नहीं करनी चाहिए ??? – Abhi9

संबंधित मुद्दे