我正在努力改变另一个片段中的片段。在我的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而不是整个布局?
答案 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();
}