Ich entwickle eine Anwendung, die 2 Fragmente enthält, und ich möchte je nach Bedarf Haut zeigen. Der folgende Code enthält ein einfaches Beispiel für mein Problem. Diese einfache Fragmentaktivität enthält 1 Schaltfläche und ein Listenfragment.
Dieses einfache Beispiel funktioniert einwandfrei. aber ich bin nicht zufrieden mit show hide fragment. Wenn Sie layout.setVisibility (View.GONE) entfernen; aus dem Code dann ft.hide (f); Fragment nicht verbergen. Tatsächlich verstecken wir kein Fragment, sondern einen Container.
Meine Frage ist, IST dies eine Möglichkeit, Hautfragmente anzuzeigen? Wenn nicht, erklären Sie bitte anhand eines getesteten Beispiels, wie Fragmente ausgeblendet und angezeigt werden, da viele Menschen mit diesem Problem konfrontiert sind.
public class MainActivity extends FragmentActivity implements OnClickListener {
Fragment1 f;
Button b;
LinearLayout layout;
Fragment myf;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = (Button) findViewById(R.id.button1);
layout = (LinearLayout) findViewById(R.id.ll);
f = new Fragment1();
}
@Override
public void onClick(View v) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
if (f.isHidden()) {
ft.show(f);
layout.setVisibility(View.VISIBLE);
b.setText("Hide");
} else {
ft.hide(f);
b.setText("Show");
layout.setVisibility(View.GONE);
}
ft.commit();
// TODO Auto-generated method stub
}
quelle
Antworten:
Leg dich nicht mit den Sichtbarkeitsflags des Containers an - FragmentTransaction.hide / show erledigt das intern für dich.
Der richtige Weg, dies zu tun, ist also:
ODER wenn Sie android.support.v4.app.Fragment verwenden
quelle
android.R.animator.fade_in
undandroid.R.animator.fade_out
?Darüber hinaus können Sie in einem Fragment Folgendes tun (z. B. wenn das Abrufen von Serverdaten fehlgeschlagen ist):
quelle
getView()
kann sein,null
wenn es noch nicht initialisiert ist.Hallo, wenn Sie diesen Ansatz verwenden, bleiben alle Fragmente nach dem erstmaligen Hinzufügen im Container. Dann enthüllen wir einfach das gewünschte Fragment und verstecken die anderen im Container.
Weitere Informationen finden Sie unter https://github.com/codepath/android_guides/wiki/Creating-and-Using-Fragments . Ich hoffe ich kann jemandem helfen. Auch wenn dies eine alte Frage ist.
quelle
quelle
Versuche dies:
quelle
Im Vergleich zu der obigen Lösung besteht der einfachste Weg aus meinem Code darin, ein Layout zu definieren, das das Fragment enthält. Anschließend können Sie das Fragment ein- oder ausblenden, indem Sie das Layoutattribut steuern, das an der allgemeinen Ansicht ausgerichtet ist. In diesem Fall ist kein zusätzlicher Code erforderlich, und die zusätzlichen Bereitstellungsattribute des Fragments konnten in das äußere Layout verschoben werden.
quelle
Das hat bei mir funktioniert
quelle
Die Antworten hier sind richtig und ich mochte @Jyo die Whiff-Idee einer Implementierung zum Anzeigen und Verstecken von Fragmenten, außer dass die Art und Weise, wie er sie derzeit hat, das Fragment beim ersten Durchlauf ausblenden würde, also habe ich eine kleine Änderung hinzugefügt, indem ich den isAdded-Check und die Show hinzugefügt habe das Fragment, wenn es nicht schon ist
quelle
In onCreate habe ich nach setContentView zwei Fragmente versteckt und sie an den Fragmentmanager übergeben, aber das erste Fragment, das als Home dienen soll, habe ich nicht ausgeblendet.
Ref: https://medium.com/@oluwabukunmi.aluko/bottom-navigation-view-with-fragments-a074bfd08711
quelle
Ich bin vielleicht viel zu spät, aber es könnte jemandem in der Zukunft helfen.
Diese Antwort ist eine Modifikation der
mangu23
Antwort.Ich habe nur eine for-Schleife hinzugefügt, um Wiederholungen zu vermeiden und einfach weitere Fragmente ohne Boilerplate-Code hinzuzufügen.
Wir brauchen zuerst eine Liste der Fragmente , die angezeigt werden sollen
Dann müssen wir es mit unseren Fragmenten füllen
Und wir brauchen eine Möglichkeit zu wissen, welches Fragment aus der Liste ausgewählt wurde, also brauchen wir
getFragmentIndex
FunktionUnd schließlich wird die
displayFragment
Methode so aussehen:Auf diese Weise können wir
displayFragment(homeFragment)
zum Beispiel anrufen .Dadurch wird das
HomeFragment
andere Fragment in der Liste automatisch angezeigt und ausgeblendet.Mit dieser Lösung können Sie weitere Fragmente an das anhängen,
fragmentList
ohne dieif
Anweisungen in der altendisplayFragment
Version wiederholen zu müssen .Ich hoffe, jemand wird dies nützlich finden.
quelle