【问题标题】:How to dismiss the fragment loaded in framelayout如何关闭框架布局中加载的片段
【发布时间】:2017-12-18 13:58:20
【问题描述】:

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

DPFragment 片段 = 新的 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 的另一个实例,因此您需要保持片段全局以便之后将其删除。
  • 当我给出这一行“getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.fl_main)).commit();”时,我得到了错误 java。 lang.NullPointerException:尝试写入空对象引用上的字段“int android.app.Fragment.mNextAnim”@tebitoq
  • DPFragment 是框架片段还是支持片段?似乎您正在使用框架 FragmentManager 添加它并使用支持 FragmentManager 删除它。这不起作用
  • @bwt 我同时使用支持框架管理器

标签: android android-fragments fragmentmanager android-framelayout


【解决方案1】:

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

所以你的代码应该是这样的

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 {
                }
            }
        }
    }
}

【讨论】:

    【解决方案2】:

    我换了行

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

    用线条

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

    现在可以完美运行了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      相关资源
      最近更新 更多