2013-10-05 10 views
7

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

Here is my code: 

// MainActivity 


public class MainActivity extends Activity { 
    Fragment Fragment_one; 
    Button one; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     //one=(Button) findViewById(R.id.button1); 
     //one.setOnClickListener(new View.OnClickListener() { 

      //@Override 
      //public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       FragmentManager man=getFragmentManager(); 
       FragmentTransaction tran=man.beginTransaction(); 
       Fragment_one=new Fragment1(); 
       tran.add(R.id.fragment_container, Fragment_one);//tran. 
       tran.addToBackStack(null); 
       tran.commit(); 

      //} 
     //}); 

    } 


} 
//fragment code 

public class Fragment1 extends Fragment{ 
    Button add; 
    Fragment2 fragment_two; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     //return super.onCreateView(inflater, container, savedInstanceState); 

     View view=inflater.inflate(R.layout.fragment_1, container,false); 
     add=(Button) view.findViewById(R.id.button1); 
     fragment_two =new Fragment2(); 
     add.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       FragmentTransaction t=getActivity().getFragmentManager().beginTransaction(); 
       t.remove(new Fragment1()); 

       t.replace(R.id.fragment1, fragment_two);t.addToBackStack(null); 
    t.commit(); 
       //t.addToBackStack(null); 

      } 
     }); 


     return view; 
    } 
} 

output screen

+0

क्यों दोनों टुकड़े को फुलाएं और अपनी श्रोता को अपनी दृश्यता को टॉगल करने के लिए क्यों न करें? – brbaker

+1

क्या आप मेरी मदद कर सकते हैं टॉगल कैसे करें? @brbaker –

+0

1) आपके खंड 2 एक्सएमएल में, दृश्यता सेट करें; 2) खंड 1 बटन दबाएं, findViewById ()। सेट दृश्यता (android.view.View.GONE) और findViewById ()। सेट दृश्यता (android.view.View.VISIBLE – brbaker

उत्तर

6

चीजें मैं अपने कोड में देख के युगल।

t.remove(new Fragment1()); 

कोड की यह पंक्ति कुछ नहीं करेंगे क्योंकि आप Fragment1 का एक नया उदाहरण दूर करने के लिए कोशिश कर रहे हैं, नहीं उदाहरण आप मूल रूप से जोड़ा।

t.replace(R.id.fragment1, fragment_two) 

यह पहली पैरामीटर कंटेनर "R.id.fragment_container" नहीं R.id.fragment1 का पता होना चाहिए।

t.addToBackStack(null); 

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

+0

@lo धन्यवाद। यह काम कर रहा है। –

1

- क्यों न दोनों टुकड़ों को फुलाएं और अपनी श्रोता को अपनी दृश्यता को टॉगल करने के लिए उपयोग न करें? - brbaker

  • आप मेरी मदद कर सकते हैं कि कैसे चालू करने के लिए @brbaker - राइडिंग गुफा

इंटरफेस जोड़ सकते हैं और गतिविधि और ओवरराइड विधि में लागू। फिर ऑनक्लिक लिस्टनर जोड़ें और इंटरफ़ेस में विधि ट्रिगर करने के लिए सेट करें। फिर आवश्यकतानुसार टुकड़ों पर शो() और छुपाएं() लेनदेन करने के लिए खंड प्रबंधक का उपयोग करें। ।

http://developer.android.com/reference/android/app/FragmentTransaction.html

शो (टुकड़ा टुकड़ा) एक पहले से छिपा हुआ टुकड़ा दिखाता है।

छुपाएं (टुकड़ा टुकड़ा) - एक मौजूदा टुकड़े को छुपाता है।

1

अपनी खंडित xml फ़ाइलों में कोड की इस पंक्ति का उपयोग करें और अपना दिन बचाएं। कृपया इस लाइन को माता-पिता और सभी लेआउट खंड xml फ़ाइलों में जोड़ने के लिए याद रखें।

android:background="?android:windowBackground" 
संबंधित मुद्दे