Java 从片段内部打开片段,而不显示以前的片段UI
我试图从片段(UpcomingFragment)内部打开一个片段(PageFragment) 当我打开片段时,前面的片段UI仍然存在,我不希望这样 我尝试了.getSupportFragmentManager()和GetChildFragmentManager(),但这两者都不能解决问题。在这里查看simular线程,我无法得到工作结果Java 从片段内部打开片段,而不显示以前的片段UI,java,android,android-fragments,Java,Android,Android Fragments,我试图从片段(UpcomingFragment)内部打开一个片段(PageFragment) 当我打开片段时,前面的片段UI仍然存在,我不希望这样 我尝试了.getSupportFragmentManager()和GetChildFragmentManager(),但这两者都不能解决问题。在这里查看simular线程,我无法得到工作结果 mRecyclerAdapter.setItemClickListener(新的CardOnClicked(){ @凌驾 单击后的公共无效(内部位置){ 日志d
mRecyclerAdapter.setItemClickListener(新的CardOnClicked(){
@凌驾
单击后的公共无效(内部位置){
日志d(标签“测试”);
Fragment pageView=新的PageFragment();
FragmentTransaction事务=getActivity().getSupportFragmentManager().beginTransaction()
//用这个片段替换fragment_容器视图中的任何内容,
//并将事务添加到后台堆栈中,以便用户可以导航回后台
事务。替换(R.id.frag,页面视图);
transaction.addToBackStack(空);
commit();
}
});
您可以在此处找到我的Github存储库:
你可以看到这里的问题
两个片段不应直接通信。所有通信都需要通过主机活动完成。为此,请使用接口 创建一个接口:
public interface IMainActivity {
void navigateFragment();
}
private IMainActivity mInterface;
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
//instantiate interface when view attach to the recycler view
mInterface = (IMainActivity) mContext;
}
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mInterface.navigateFragment();
}
});
将接口添加到适配器覆盖onAttachedToRecyclerView:
public interface IMainActivity {
void navigateFragment();
}
private IMainActivity mInterface;
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
//instantiate interface when view attach to the recycler view
mInterface = (IMainActivity) mContext;
}
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mInterface.navigateFragment();
}
});
最后,实现从到MainActivity的接口并重写该方法,然后添加片段。
@Override
public void navigateFragment() {
mViewProfileFragment = new ViewProfileFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.main_content_frame, mViewProfileFragment, getString(R.string.tag_fragment_view_profile));
transaction.commit();
}
两个片段不应该直接通信。所有通信都需要通过主机活动完成。为此,请使用接口 创建一个接口:
public interface IMainActivity {
void navigateFragment();
}
private IMainActivity mInterface;
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
//instantiate interface when view attach to the recycler view
mInterface = (IMainActivity) mContext;
}
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mInterface.navigateFragment();
}
});
将接口添加到适配器覆盖onAttachedToRecyclerView:
public interface IMainActivity {
void navigateFragment();
}
private IMainActivity mInterface;
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
//instantiate interface when view attach to the recycler view
mInterface = (IMainActivity) mContext;
}
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mInterface.navigateFragment();
}
});
最后,实现从到MainActivity的接口并重写该方法,然后添加片段。
@Override
public void navigateFragment() {
mViewProfileFragment = new ViewProfileFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.main_content_frame, mViewProfileFragment, getString(R.string.tag_fragment_view_profile));
transaction.commit();
}
嘿,谢谢你的回答,你愿意多解释一点原因吗,我试着阅读谷歌的文档,发现有点难以理解。嘿,谢谢你的回答,你愿意多解释一点原因吗,我试着阅读谷歌的文档,我发现有点难以理解。