如何从另一个片段更改片段并将其应用于 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
}
我正在为从另一个片段更改一个片段而苦苦挣扎。在我的 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
}