【发布时间】:2017-10-27 09:41:40
【问题描述】:
我已经查看了许多类似的问题但我仍然无法从该容器中可见的片段替换我的主活动的容器布局 (FrameLayout)。
这是我正在尝试做的事情,我有一个带有导航抽屉的主要活动,并且在导航抽屉项目上单击我正在相应地更改片段,直到此为止我是成功的。这些片段是登录、注册、类别、联系我们等。我正在使用FragmentManager、FragmentTransaction 其方法替换来更改/替换片段。检查下面的代码
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();
}
这和我所有的片段extends Fragment 一样工作正常。当我尝试在此mainActivity 的容器中可见的片段之一中调用此方法时,问题就出现了。假设我在 FragLogin 中有一个 textView 说“没有帐户注册”,所以点击这个 textView 我必须在 mainActivity 的同一个容器中打开 FragRegister。当我在我的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();
它不能将R.Id.flFragments 识别为它在mainActivity 中而不是在FragLogin 中。
那么我怎样才能从 FragLogin 替换 mainActivity 的容器中的那个 FragRegister?
【问题讨论】:
标签: java android android-layout android-fragments navigation