Frage

Ich habe versucht, zwischen Fragmenten zu navigieren.Ich habe die NewFragment.java mit dem neuen Fragment funktioniert.Mein Problem ist:

Wie mache ich das onClickListener laufen NewFragment.java richtig?

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

        Intent i = new Intent(getActivity(), NewFragment.class);
        startActivity(i);

    }
});

ZU IHRER INFORMATION:Dies ist aus einem Fragment (ich weiß nicht, ob das wichtig ist).

War es hilfreich?

Lösung

Fügen Sie Ihrer Klick-Listener-Funktion folgenden Code hinzu,

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

Zeichenfolge "findThisFragment" kann verwendet werden, um das Fragment später zu finden, wenn Sie es brauchen.

Andere Tipps

Dies ist ein genauer beschriebener Code von @ Narendras Code,

Zuerst benötigen Sie eine Instanz des 2. 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 möglicherweise getSupportFragmentManager() anstelle von getFragmentManager() .

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

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

Benutze das,

AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment myFragment = new MyFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();
 Fragment fr = new Fragment_class();
             FragmentManager fm = getFragmentManager();
            FragmentTransaction fragmentTransaction = fm.beginTransaction();
            fragmentTransaction.add(R.id.viewpagerId, fr);
            fragmentTransaction.commit();

Nur um genau zu sein, R.id.viewpagerId wird in Ihrem aktuellen Klassenlayout erstellt, wird das neue Fragment beim Aufruf automatisch infiltriert.

Hinzufügen zur @ Narendra-Lösung...

WICHTIG:Bei der Arbeit mit Fragmenten hängt die Navigation eng mit der Hostaktivität zusammen, sodass Sie nicht einfach von Fragment zu Fragment springen können, ohne diese Fragmentklasse in der Hostaktivität zu implementieren.

Probe:

public class MyHostActivity extends AppCompatActivity implements MyFragmentOne.OnFragmentInteractionListener {

Überprüfen Sie außerdem, ob Ihre Host-Aktivität die nächste Überschreibungsfunktion hat:

@Override public void onFragmentInteraction(Uri uri) {} Hoffe das hilft...

Nun, mein Problem war, dass ich den Code aus der Antwort verwendet habe, der hier als Lösung überprüft wird, aber nachdem die Ersetzung ausgeführt wurde, war die erste Ebene noch sichtbar und funktionierte unter dem gerade geöffneten Fragment.Meine Lösung war einfach, fügte ich hinzu

.remove(CourseListFragment.this)

das CourseListFragment ist eine Klassendatei für das Fragment, das ich schließen wollte.(Hauptaktivität.java, aber für einen bestimmten Abschnitt (Navigationsschubladenfragment), wenn es für Sie sinnvoller ist) also sieht mein Code jetzt so aus :

LecturesFragment nextFrag= new LecturesFragment();

                    getActivity().getSupportFragmentManager().beginTransaction()
                            .remove(CourseListFragment.this)
                            .replace(((ViewGroup)getView().getParent()).getId(), nextFrag, "findThisFragment")
                            .addToBackStack(null)
                            .commit();

Und es wirkt wie ein Zauber für mich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top