Ich habe schon in vielen der ähnliche Frage sah aber noch bin ich nicht in der Lage Container-Layout (FrameLayout) meiner Hauptaktivität aus einem Fragment zu ersetzen, die in diesem Container sichtbar ist.
Hier ist, was ich versuche, ich habe eine Haupttätigkeit mit Navigationsleiste zu tun und auf Navigationsleiste Elemente klicken Ich ändere entsprechend Fragment, ich bin bis zu diesem Erfolg. Diese Fragmente sind, Register, Kategorien, Kontakt usw. Ich ändere/ersetzen Fragmente mit FragmentManager
, FragmentTransaction
seine Methode ersetzen. Überprüfen Sie den Code untenWie Fragment von Eltern Layout von Kind ersetzen
public void changeFragment(int position) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
Fragment fragment = new Fragment();
BlankFragment blankFragment = new BlankFragment();
switch (position) {
case 0:
fragment = new FragMain();
break;
case 1:
fragment = new FragPrivacyPolicy();
break;
case 2:
fragment = new SettingsFragment();
break;
case 101:
fragment = new FragLogin();
break;
case 102:
fragment = new FragRegister();
break;
case 103:
fragment = new FragEditAccount();
break;
case 104:
fragment = new FragOrderHistory();
break;
case 105:
fragment = new FragForgotPass();
break;
case 106:
fragment = new FragOrderDetail();
break;
case 108:
fragment = new FragAboutUs();
break;
case 109:
fragment = new FragContactUs();
break;
case 110:
fragment = new FragMain();
break;
}
transaction.replace(R.id.flFragments, fragment);
transaction.commit();
}
, die als alle meine Fragmente extends Fragment
funktioniert gut. Das Problem tritt auf, wenn ich versuche, diese Methode in einem der Fragmente aufzurufen, die in diesem Container sichtbar sind. Angenommen, ich habe eine Textview in FragLogin
sagen: „Sie haben kein Konto haben Register“ usw. klicken, um diese Textview Ich habe FragRegister
in demselben Behälter von mainActivity zu öffnen. Als ich es wie dies in meinem FragLogin
App tun Abstürze deutete auf die transaction.commit();
MainActivity activity = new MainActivity();
activity.changeFragment(102);
Und wenn ich wie diese versuchen
FragRegister fragRegister = new FragRegister();
// Fragment fragRegister = new FragRegister();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.addToBackStack(null);
transaction.replace(R.Id.flFragments, fragRegister).commit();
es nicht die R.Id.flFragments
als im Inneren des mainActivity nicht in FragLogin erkennen.
Also, wie kann ich das FragRegister in mainActivity
‚s Behälter aus FragLogin ersetzen?
danke es funktioniert jetzt :) mit 'getActivity()' jetzt funktionieren beide Methoden gut. –
Ihre meisten Welcome.If meine Antwort geholfen bitte akzeptieren :) – Anonymous
ich upvoted weil es Frist Antwort zu akzeptieren ist. Jetzt auch akzeptiert. –