Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从片段内部打开片段,而不显示以前的片段UI_Java_Android_Android Fragments - Fatal编程技术网

Java 从片段内部打开片段,而不显示以前的片段UI

Java 从片段内部打开片段,而不显示以前的片段UI,java,android,android-fragments,Java,Android,Android Fragments,我试图从片段(UpcomingFragment)内部打开一个片段(PageFragment) 当我打开片段时,前面的片段UI仍然存在,我不希望这样 我尝试了.getSupportFragmentManager()和GetChildFragmentManager(),但这两者都不能解决问题。在这里查看simular线程,我无法得到工作结果 mRecyclerAdapter.setItemClickListener(新的CardOnClicked(){ @凌驾 单击后的公共无效(内部位置){ 日志d

我试图从片段(UpcomingFragment)内部打开一个片段(PageFragment)

当我打开片段时,前面的片段UI仍然存在,我不希望这样

我尝试了.getSupportFragmentManager()和GetChildFragmentManager(),但这两者都不能解决问题。在这里查看simular线程,我无法得到工作结果

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

嘿,谢谢你的回答,你愿意多解释一点原因吗,我试着阅读谷歌的文档,发现有点难以理解。嘿,谢谢你的回答,你愿意多解释一点原因吗,我试着阅读谷歌的文档,我发现有点难以理解。