2014-01-09 28 views
37

Ich habe versucht, eine Navigation zwischen Fragmenten zu machen. Ich habe die NewFragment.java mit dem neuen Fragment arbeiten. Mein Problem ist:Wie öffne ich ein neues Fragment von einem anderen Fragment

Wie mache ich diese OnClickListener NewFragment.java korrekt ausführen?

FYI: Das ist von innen ein Fragment (ich weiß nicht, ob das wichtig ist).

Antwort

79

Hinzufügen in Ihrem Klick-Listener-Funktion folgenden Code,

 NextFragment nextFrag= new NextFragment(); 
    getActivity().getSupportFragmentManager().beginTransaction() 
    .replace(R.id.Layout_container, nextFrag,"findThisFragment") 
    .addToBackStack(null) 
    .commit(); 
+0

was meinst du mit TAG_FRAGMENT? Vielen Dank. – FilipeOS

+0

@FilipeOS TAG_FRAGMENT kann Ihnen helfen, es später zu finden Fragment – whalemare

+3

Ich glaube nicht, dass Sie "this" im Fragment verwenden können. Verwenden Sie stattdessen getActivity(). GetFrag ... Da OP gefragt "Öffnen Sie das Fragment von einem anderen Fragment" – Alex

2

Sie sollten eine Funktion innerhalb der Aktivität erstellen, um ein neues Fragment zu öffnen und die Aktivitätsreferenz an das Fragment zu übergeben. Rufen Sie diese Funktion bei einem Ereignis im Fragment auf.

+2

Aus dem Inneren eines Fragments Sie automatisch bereits einen Verweis auf die übergeordnete Aktivität. Verwenden Sie getActivity() oder wenn Sie onAttach verwenden, befindet sich die Aktivität in den Argumenten. – miva2

1
@Override 
public void onListItemClick(ListView l, View v, int pos, long id) { 
    super.onListItemClick(l, v, pos, id); 
    UserResult nextFrag= new UserResult(); 
    this.getFragmentManager().beginTransaction() 
    .replace(R.id.content_frame, nextFrag, null) 
    .addToBackStack(null) 
    .commit(); 
} 
5

Dieser mehr Code von Code des @ Narendra beschrieben wird,

Zuerst müssen Sie eine Instanz des zweiten Fragments. Dann sollten Sie Objekte von FragmentManager und FragmentTransaction haben. Der vollständige Code ist wie folgt:

Fragment2 fragment2=new Fragment2(); 
FragmentManager fragmentManager=getActivity().getFragmentManager(); 
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.content_main,fragment2,"tag"); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 

Hoffe, das wird funktionieren. Manchmal erhalten Sie getSupportFragmentManager() anstelle von getFragmentManager().

0

verwenden,

  AppCompatActivity activity = (AppCompatActivity) view.getContext(); 
      Fragment myFragment = new MyFragment(); 
      activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit(); 
Verwandte Themen