Wie ersetze ich ein Fragment beim Klicken auf die Schaltfläche dieses Fragments?
Lesezeit: 4 Minuten
Top-Katze
Ich habe eine Aktivität mit mehreren Fragmenten. Aktivität hat zunächst ein Fragment und darin zwei Schaltflächen. Wenn ich auf diese Schaltfläche klicke, muss ich das Fragment durch ein neues Fragment ersetzen. Jedes Fragment hat verschiedene Widgets und ersetzt das aktuelle Fragment als verschiedene Ereignisse.
Das ist mein Problem. Wie kann ich das erreichen?
Schlagen Sie mir Ideen vor.
Warum kann man nicht einfach die Sichtbarkeit der Fragmente ändern?
– Gruseliger Wombat
20. Januar ’14 um 7:56
Übergeben Sie den Rückruf an die Aktivität und lassen Sie ihn das Fragment ersetzen. Erstellen Sie dazu einfach eine Schnittstelle mit Callback und implementieren Sie sie in Activity. Überschreiben Sie dann in Fragment die Funktion onAttach (Aktivität) und speichern Sie die Schnittstelle für onClick
– Androider
20. Januar ’14 um 7:57
Ahmad Raza
Sie können fragment durch FragmentTransaction ersetzen.
Bitte schön.
Machen Sie eine Schnittstelle.
public interface FragmentChangeListener
{
public void replaceFragment(Fragment fragment);
}
implementiert Ihre Fragment-Halteaktivität mit dieser Schnittstelle.
public class HomeScreen extends FragmentActivity implements
FragmentChangeListener {
@Override
public void replaceFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();;
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(mContainerId, fragment, fragment.toString());
fragmentTransaction.addToBackStack(fragment.toString());
fragmentTransaction.commit();
}
}
Rufen Sie diese Methode aus Fragmenten wie folgt auf.
//In deinem Fragment.
public void showOtherFragment()
{
Fragment fr=new NewDisplayingFragment();
FragmentChangeListener fc=(FragmentChangeListener)getActivity();
fc.replaceFragment(fr);
}
Hoffe das wird funktionieren!
HINWEIS: mContainerId ist die ID der Ansicht, die die Fragmente enthält. Sie sollten auch die onString()-Methode von Fragment überschreiben.
die Frage ist, wie die Methode in der Aktivität aus dem enthaltenden Fragment aufgerufen wird, nicht wie die Methode aussehen soll
– Mario Stoilov
20. Januar ’14 um 8:19
@MarioStoilov: Entschuldigung, ich habe meine Antwort aktualisiert. Bitte versuchen Sie es.
– Ahmad Raza
20. Januar ’14 um 9:05
Sie sollten auch die onString()-Methode von Fragment überschreiben Was bedeutet das?
– Top-Katze
21. Januar ’14 um 6:29
Durch Überschreiben der onString()-Methode können Sie jedem Fragment einen eindeutigen Namen zuweisen, so wie Sie “myFragment” von der onString()-Methode des Fragments zurückgeben können. Angenommen, Sie müssen ein Fragment in FragmentBackStack suchen. Dann können Sie es mithilfe der onString()-Antwort durchsuchen. Dies ist die Zeichenfolge “myFragment”.
– Ahmad Raza
21. Januar ’14 um 19:02
Noch ein Zweifel. Jeder Fragmentwert sollte auch für die nächsten Fragmente verfügbar sein. Wie kann ich Argumente an fragment übergeben, wenn ich ‘fc.replaceFragment(fr); ‘? ich habe ‘fragment.setArguments(args); ‘. Jedes Fragment ist separate Klassen.
– Top-Katze
22. Januar ’14 um 5:20
Tiefes Bhatt
Auch ich lerne Android…
Ich habe das gleiche Problem kürzlich gelöst, “So ändern Sie das Fragment beim Klickereignis der Schaltfläche”.
buttonName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction fragmentTransaction = getActivity()
.getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame1, new Homefragment());
fragmentTransaction.commit();
}
});
Hier frame1 ist es FrameLayout die in der XML meines DrawerLayers definiert haben.
Also, wann immer ich eine Fragmenttransaktion möchte, verwende ich diesen Code. Jedes Mal wird es ersetzt frame1 anstelle Ihres letzten Fragments.
FragmentTransaction fragmentTransaction = getActivity()
.getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame1, new newfragment());
fragmentTransaction.commit()
Hoffe das hilft..
Sie können Folgendes verwenden, um ein Fragment beim Klicken auf die Schaltfläche dieses Fragments zu ersetzen:
getFragmentManager().beginTransaction().replace(R.id.main_content, new insertFragmentNameHere()).addToBackStack(null).commit();
Willkommen bei Stapelüberlauf! Bitte nicht nur mit Quellcode antworten. Versuchen Sie, eine schöne Beschreibung der Funktionsweise Ihrer Lösung bereitzustellen. Siehe: Wie schreibe ich eine gute Antwort?. Danke
– sɐunıɔןɐqɐp
21. August ’18 um 23:41
Definieren Sie eine Schnittstelle und nennen Sie sie IChangeListener (oder so ähnlich) und definieren Sie eine Methode darin, die die Arbeit erledigt (z. changeFragment()) (oder rufen Sie eine andere Methode auf, die die Arbeit erledigt), um das Fragment zu ändern).
Lassen Sie Ihre Aktivität die Schnittstelle implementieren, oder lassen Sie eine anonyme Klasse innerhalb der Aktivität sie implementieren.
Erstellen Sie einen parametrisierten Konstruktor Ihres Fragments, der einen IChangeListener-Parameter akzeptiert.
Übergeben Sie beim Initialisieren des Fragments Ihre IChangeListener-Implementierung (die anonyme Klasse oder die Aktivität, die sie implementiert).
Lassen Sie den onClick-Listener der Schaltfläche die Änderungsmethode des IChangeListener aufrufen.
Ab der Zukunft 2017 und danach gibt es verschiedene Bibliotheken, die auslösen Veranstaltungen mit Bus und jetzt können Sie es verwenden, um der Aktivität mitzuteilen, wenn ein Ereignis in einem Fragment ausgelöst wird, das ihm gehört.
Warum kann man nicht einfach die Sichtbarkeit der Fragmente ändern?
– Gruseliger Wombat
20. Januar ’14 um 7:56
Übergeben Sie den Rückruf an die Aktivität und lassen Sie ihn das Fragment ersetzen. Erstellen Sie dazu einfach eine Schnittstelle mit Callback und implementieren Sie sie in Activity. Überschreiben Sie dann in Fragment die Funktion onAttach (Aktivität) und speichern Sie die Schnittstelle für onClick
– Androider
20. Januar ’14 um 7:57