2013-10-05 10 views
7

Sto usando due frammenti nella mia attività. Inizialmente aggiungerò un frammento all'attività. Quindi, usando il listener nel primo frammento, voglio sostituirlo con il secondo frammento. Ho provato secondo la mia comprensione, ma non sta sostituendo. Mostra entrambi i frammenti sovrapposti.Come sostituire un frammento con un altro frammento usando l'ascoltatore nel primo frammento

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

Perché non gonfiare entrambi i frammenti e utilizzare l'ascoltatore per attivarne la visibilità? – brbaker

+1

Puoi aiutarmi come passare? @brbaker –

+0

1) Nel tuo frammento2 xml, imposta la visibilità su GONE; 2) sul pulsante 1, premere findViewById (). SetVisibility (android.view.View.GONE) e findViewById (). SetVisibility (android.view.View.VISIBLE – brbaker

risposta

6

Un paio di cose che vedo nel codice.

t.remove(new Fragment1()); 

Questa riga di codice non farà nulla perché si sta cercando di rimuovere una nuova istanza di Fragment1, non l'istanza originariamente aggiunto.

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

Questo il primo parametro deve essere l'id del contenitore "R.id.fragment_container" Non R.id.fragment1.

t.addToBackStack(null); 

Questo codice può o non può essere necessario a seconda se si desidera consentire all'utente di premere il tasto 'back' di tornare a fragment_one dopo che sono arrivati ​​a fragment2.

+0

@lo. Funziona. –

1

-Perché non gonfiare entrambi i frammenti e utilizzare l'ascoltatore per attivare la visibilità? - brbaker

  • Mi potete aiutare come alternare @brbaker -? Equitazione Cave

aggiungere l'interfaccia e implementazione di attività e metodo di sostituzione. Quindi aggiungere onClickListener e impostare il metodo di attivazione nell'interfaccia. Quindi utilizzare il gestore dei frammenti per eseguire le transazioni show() e hide() sui frammenti secondo necessità. .

.

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

mostra (frammento frammento) -Mostra un frammento precedentemente nascosto.

hide (Frammento di frammento): consente di nascondere un frammento esistente.

1

Utilizzare questa riga di codice nei file xml frammentati e salvare la giornata. Ricorda, per favore, di aggiungere questa riga nei genitori e in tutti i file xml del frammento di layout.

android:background="?android:windowBackground"