如何从另一个片段更改片段并将其应用于 main_content 布局?

How to change fragment from another fragment an apply it on the main_content layout?

我正在为从另一个片段更改一个片段而苦苦挣扎。在我的 main_activity 中,我有一个布局文件,其中包含页面内容的底部导航视图和框架布局。在导航视图上从片段到片段的更改工作正常,但如果我从片段访问新的 "subfragment",则新片段是透明的。

有什么建议吗?下面的代码来自我的片段和我的主要活动。

MainActivity parentActivity = (MainActivity) getActivity();
            parentActivity.switchContent(new VisArrangementInfo(), data, true);

MainActivity 中的 switchContent:

public void switchContent(final Fragment fragment, Bundle data, final Boolean addToBackStackOption){
getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.content_frame, fragment)
                .addToBackStack(null)
                .commit();

}

ID content_frame 是我的 MainActivity 布局文件的 ID。 bottomnavigationview 和 framelayout 在此文件中。框架布局的 ID 是 "main_frame"。

根据我的理解,我想更改 "main_frame" 而不是 "content_fram",因为这里应该是主要内容。当我这样做时,我根本找不到我尝试打开的片段的布局。是因为我试图替换框架布局而不是整个布局吗?

第一次使用add代替replace:

public void switchContent(final Fragment fragment, Bundle data, final Boolean addToBackStackOption){
getSupportFragmentManager()
                .beginTransaction()
                .add(R.id.content_frame, fragment)
                .addToBackStack(null)
                .commit();

}

在你的 Fragment A 中定义一个接口。

public interface FragmentEventListener {
    void onFragmentChangeEvent(Fragment newFragment);
}

private FragmentEventListener listener;
public void setEventListener(FragmentEventListener listener) {
    this.listener = listener;
}

在你的片段中,当你想改变片段时,调用方法。

if (listener != null) {
    listener.onFragmentChangeEvent(FragmentB);
}

在您的主 activity 中,实现 FragmentEventListener,这样您就可以从 MainActivity 切换到 Fragment B

public class MainActivity  implements FragmentA.FragmentEventListener {
...
...
fragmentB.setEventListener(this); // here identify the listener.
....

@Override
public void onFragmentChangeEvent(Fragment newFragment) {
    switchContent  // Switch to Fragment B here
}