私は似たような疑問を多く見ましたが、私のメインアクティビティのコンテナレイアウト(FrameLayout)をそのコンテナに表示されているフラグメントから置き換えることができません。
これは私がやろうとしていることです。私はナビゲーション・ドロワーとメイン・アクティビティを持っています。ナビゲーション・ドロワー・アイテムのクリックで、私はそれに応じてフラグメントを変更しています。これらのフラグメントは、ログイン、登録、カテゴリ、お問い合わせなどです。FragmentManager
、FragmentTransaction
でフラグメントを交換/置き換えています。すべての私の断片extends Fragment
として正常に動作している親レイアウトのフラグメントを子から置き換える方法
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();
}
以下のコードを確認してください。この問題は、このmainActivity
のコンテナに表示されているフラグメントの1つでこのメソッドを呼び出そうとしたときに発生します。 FragLogin
というテキストビューで「アカウントを持っていません」というメッセージが表示された場合は、このテキストをクリックしてください。FragRegister
をmainActivityの同じコンテナに開く必要があります。私は私のFragLogin
アプリケーションでこのようにそれを行うとtransaction.commit();
MainActivity activity = new MainActivity();
activity.changeFragment(102);
を指してクラッシュし、私はこの
FragRegister fragRegister = new FragRegister();
// Fragment fragRegister = new FragRegister();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.addToBackStack(null);
transaction.replace(R.Id.flFragments, fragRegister).commit();
ようにしようとすると、それはmainActivity内にないFragLoginにそのようR.Id.flFragments
を認識しません。
したがって、FragRegisterのmainActivity
のコンテナでそのFragRegisterを置き換えることはできますか?
「getActivity()」では両方のメソッドがうまく機能しています。 –
あなたの一番ようこそ。私の答えが助けてくれたら助かりました:) – Anonymous
答えを受け入れるのに時間制限があるので私はアップしました。今でも受け入れられている。 –