6

Şu anda parçamı eklemek için kullanıyorum "RELATIVE_LAYOUT" konteyneri var. Parçacık XML düzenini RelativeLayout kapsayıcısına yüklemek için OnClickListener bir düğmeyi kullanıyorum.Düğme Üzerine Parça Ekleme/Kaldırma Nasıl Tıklanır?

Neyi başarmak istediğim, düğmeye bir kez bastığımda, parçanın yüklenmesi gerektiğidir ... ve tekrar bastığımda, parça kaldırılmalıdır. Parçanın yüklü olup olmadığını belirlemek için tamsayı kullanmayı denedim, ancak başarısız oldu. Herhangi bir yardım takdir ...

KODU:

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(); 
      } 
     }); 
    } 

cevap

12

Sorununuz size Button tıklayın yeniFragment her şey yaratmak olmasıdır. için şu anFragment'a bir başvuru almanız ve sonra bunu kaldırmanız gerekir. Ayrıca, bayrağı kullanmanız gerekmemektedir. Fragment eklerken, etiketi etiketine ekleyebilirsiniz. Fragment'u kaldırdıktan sonra, Fragment'u eklemek için kullanılan etiketi, o sırada eklenen Fragment'a başvurmak için kullanabilirsiniz. İşte

bunu gerektiğine dair bir örnek:

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

Evet, sadece daha iyi bir yaklaşım tamamen kaldırmak olduğunu eklersiniz değişkeni "ekledi" ve sadece fragmanı yöneticisinde parçaların presention ile karar .. Bu durumda, ekranın – Billda

+0

dönmesinden sonra geri yükleme durumuyla daha az çalışacaksınız. Doğru, kodu değiştirdim :) –

+0

Mükemmel cevap ... Şüphesiz, ilk kez düğmeye bastığımda, java bir nesne oluşturur. FragmentOne f1 ve findFragmentByTag tarafından döndürülen değeri iletir, ancak "etiket" etiketi, if bloğunda bunu yaptığımızdan beri herhangi bir parçayla henüz ilişkilendirilmez. Yani, bu bir hata oluşturmamalıdır ??? – Abhi9