如何关闭 framelayout 中加载的片段

How to dismiss the fragment loaded in framelayout

我使用这些行删除了片段,我在最后得到了日志,但是这两行不起作用

DPFragment frag = new DPFragment(); getSupportFragmentManager().beginTransaction().remove(frag).commit();

这是我的 MainActivity,我在其中使用了选项卡监听器

 tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {

            if(isActiveFrame){

                DPFragment frag = new DPFragment();
                getSupportFragmentManager().beginTransaction().remove(frag).commit();

                isActiveFrame =false;

            }else
            {

            }
        }

这是我的ActivityMain.xml

  <FrameLayout
    android:id="@+id/fl_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.example.myproject.externals.CustomViewPager
        android:id="@+id/vp_CustomViewPager"
        android:layout_height="match_parent"
        android:layout_width="match_parent" />

</FrameLayout>

我用这条线加载碎片

getFragmentManager().beginTransaction().replace(R.id.fl_main, new DPFragment()).addToBackStack(null).commit();

而不是创建新的 DPFragment 实例 DPFragment frag = new DPFragment(); 将其保留为 class 变量。

所以你的代码应该像

public class MainActivity extends Activity{
       private DPFragment frag;
       ...
           @Override
    protected void onCreate(Bundle savedInstanceState) {
        frag = new DPFragment();
        //use the DPFragment instance frag for adding it to CustomViewPager
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                if (isActiveFrame) {
               getSupportFragmentManager().beginTransaction().remove(frag).commit();
                    isActiveFrame = false;
                } else {
                }
            }
        }
    }
}

我换了行

  getSupportFragmentManager().beginTransaction().remove(frag).commit();

用线

  if (getSupportFragmentManager().findFragmentById(R.id.fl_main) != null) {

                    getSupportFragmentManager().popBackStack();

                }

现在完美运行了。