Ich habe versucht, zwischen Fragmenten zu navigieren. Ich habe das NewFragment.java
mit dem neuen Fragment zum Laufen gebracht. Mein Problem ist:
Wie kann ich diese machen onClickListener
Lauf 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 heraus (ich weiß nicht, ob das wichtig ist).
public class MyHostActivity extends AppCompatActivity implements MyFragmentOne.OnFragmentInteractionListener {
Überprüfen Sie auch, ob Ihre Host-Aktivität die nächste Überschreibungsfunktion hat: `@Override public void onFragmentInteraction (Uri uri) {}` Hoffe, das hilft ...Antworten:
Fügen Sie folgenden Code in Ihre Click-Listener-Funktion ein:
NextFragment nextFrag= new NextFragment(); getActivity().getSupportFragmentManager().beginTransaction() .replace(R.id.Layout_container, nextFrag, "findThisFragment") .addToBackStack(null) .commit();
Die Zeichenfolge
"findThisFragment"
kann bei Bedarf verwendet werden, um das Fragment später zu finden.quelle
Layout_container
?Layout_container
sein soll?Dies ist mehr 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 lautet 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. Wenn Sie Android X verwenden , benötigen Sie getSupportFragmentManager () anstelle von getFragmentManager ().
quelle
content_main
dasSie sollten eine Funktion innerhalb der Aktivität erstellen, um ein neues Fragment zu öffnen und die Aktivitätsreferenz an das Fragment zu übergeben. Bei einem Ereignis innerhalb des Fragments sollten Sie diese Funktion aufrufen.
quelle
Benutze das,
AppCompatActivity activity = (AppCompatActivity) view.getContext(); Fragment myFragment = new MyFragment(); activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();
quelle
@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(); }
quelle
Sie können Kotlin verwenden, um ein durch ein
Fragment
anderes zu ersetzencontainer
button.setOnClickListener { activity!! .supportFragmentManager .beginTransaction() .replace(R.id.container, NewFragment.newInstance()) .commitNow() }
quelle
R.id.viewpagerId
Um genau zu sein, wird das neue Fragment beim Aufrufen automatisch in Ihr aktuelles Klassenlayout infiltriert.quelle
Hinzufügen zur @ Narendra-Lösung ...
WICHTIG: Wenn Sie mit Fragmenten arbeiten, hängt die Navigation eng mit der Hostaktivität zusammen. Sie können also nicht einfach von Fragment zu Fragment springen, ohne diese Fragmentklasse in der Hostaktivität zu implementieren.
Stichprobe:
public class MyHostActivity extends AppCompatActivity implements MyFragmentOne.OnFragmentInteractionListener {
Überprüfen Sie außerdem, ob Ihre Hostaktivität über die nächste Überschreibungsfunktion verfügt:
@Override public void onFragmentInteraction(Uri uri) {}
Hoffe das hilft...quelle
Nun, mein Problem war, dass ich den Code aus der Antwort verwendet habe, der hier als Lösung überprüft wird, aber nachdem der Austausch 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. (MainActivity.java, aber für einen bestimmten Abschnitt (Navigationsschubladenfragment), wenn es für Sie sinnvoller ist), sodass mein Code jetzt so aussieht:
LecturesFragment nextFrag= new LecturesFragment(); getActivity().getSupportFragmentManager().beginTransaction() .remove(CourseListFragment.this) .replace(((ViewGroup)getView().getParent()).getId(), nextFrag, "findThisFragment") .addToBackStack(null) .commit();
Und es funktioniert wie ein Zauber für mich.
quelle
Geben Sie zunächst eine ID für Ihr Fragment-Layout ein, z.
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" **android:id="@+id/cameraFragment"** tools:context=".CameraFragment">
und verwenden Sie diese ID, um die Ansicht durch eine andere fragment.java-Datei zu ersetzen. z.B
ivGallary.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { UploadDoc uploadDoc= new UploadDoc(); (getActivity()).getSupportFragmentManager().beginTransaction() .replace(**R.id.cameraFragment**, uploadDoc, "findThisFragment") .addToBackStack(null) .commit(); } });
quelle