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

时间:2018-06-08 11:57:41

标签: java android android-fragments bottomnavigationview

我正在努力改变另一个片段中的片段。在我的main_activity中,我有一个布局文件,其中包含bottomnavigationview和framelayout,用于页面上的内容。在导航视图中从片段到片段的更改工作正常,但是如果我访问新的"子片段"从片段中,新片段是透明的。

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

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的layoutfile的id。 bottomnavigationview和framelayout在此文件中。 framelayout的ID是" main_frame"。

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

2 个答案:

答案 0 :(得分:1)

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);
}

在您的主要活动中,实施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
}

答案 1 :(得分:0)

首次使用add代替replace

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

}