从片段内部打开片段而没有出现以前的片段UI

时间:2019-05-15 17:06:01

标签: java android android-fragments

我正在尝试从片段(UpcomingFragment)内部打开片段(PageFragment)。

当我打开片段时,以前的片段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://imgur.com/a/BHkXOsc

1 个答案:

答案 0 :(得分:0)

两个片段永远不能直接通信。所有通信都需要通过主机活动来完成。为此,请使用接口。

创建界面:

public interface IMainActivity {
void navigateFragment(); 
}

将接口添加到适配器重写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();
        }
    });

最后,实现from到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();
}