Momentan habe ich einen "RELATIVE_LAYOUT" Container, den ich zum Hinzufügen meines Fragments verwende. Ich verwende OnClickListener auf einer Schaltfläche, um das Fragment-XML-Layout in den RelativeLayout-Container zu laden.Wie man Fragment auf Knopf klicken?
Was ich will, erreichen, ist, dass, wenn ich die Taste einmal drücken, sollte das Fragment laden ... und wenn ich es erneut drücken sollte das Fragment entfernt werden. Ich habe bereits versucht, mit integer anzugeben, ob ein Fragment geladen ist, aber es ist fehlgeschlagen. jede Hilfe dankbar ...
Code:
public class MainActivity extends Activity {
Button B1,B2;
int boolb1=0, boolb2=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
B1 = (Button)findViewById(R.id.btn1);
B2 = (Button)findViewById(R.id.btn2);
B1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
FragmentOne f1 = new FragmentOne();
if(boolb1==0)
{ft.add(R.id.frg1, f1);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
boolb1=1;}
else
{ft.remove(f1);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
boolb1=0;}
//ft.addToBackStack("f1");
ft.commit();
}
});
B2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
FragmentTwo f2 = new FragmentTwo();
if(boolb2==0) {
ft.add(R.id.frg2, f2);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
boolb2=1;
} else {
ft.remove(f2);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
boolb2=0;
}
//ft.addToBackStack("f2");
ft.commit();
}
});
}
Ja, ich würde nur hinzufügen, dass besserer Ansatz ist vollständig zu entfernen „hinzugefügt“ variabel und nur durch presention von Fragmenten in Fragment-Manager entscheiden .. In diesem Fall haben Sie weniger Arbeit mit der Wiederherstellung des Zustands nach der Drehung des Bildschirms – Billda
Sie haben Recht, ich habe den Code angepasst :) –
Ausgezeichnete Antwort ... ein Zweifel, obwohl, wenn das erste Mal, dass ich den Knopf drücke, erstellt Java ein Objekt FragmentOne f1 und übergibt ihm den von findFragmentByTag zurückgegebenen Wert, aber das Tag "tag" ist noch keinem Fragment zugeordnet, da wir das im if-Block tun. Also, sollte das nicht einen Fehler erzeugen ??? – Abhi9