我正在尝试从片段内部打开一个片段(pagefragment((即将fragment(。
当我打开片段时,以前的片段UI仍然存在,我不希望这样。
我曾尝试过.getSupportFragmentManager((和getChildFragmentManager((,这些都没有解决问题。
mRecyclerAdapter.setItemClickListener(new CardOnClicked() {
@Override
public void onCardClicked(int position) {
Log.d(TAG, "Test");
Fragment pageView = new PageFragment();
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction()
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack so the user can navigate back
transaction.replace(R.id.frag, pageView);
transaction.addToBackStack(null);
transaction.commit();
}
});
您可以在这里找到我的GitHub存储库:
https://github.com/kylegwyndavies/atv
您可以在这里看到问题
https://i.stack.imgur.com/tp9kz.jpg
两个片段永远不应直接传达。所有沟通都需要通过主机活动来完成。为此使用接口。
创建一个接口:
public interface IMainActivity {
void navigateFragment();
}
添加接口到适配器Override OnattachedTorecyClerview:
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();
}