如何杀死片段?

时间:2016-05-22 15:20:45

标签: android android-fragments

好吧,我认为它应该像

一样简单
fragmentManager.beginTransaction().replace(R.id.container, otherFragment).commit();

应该这样做,但事实并非如此。

即使fragmentManager.beginTransaction().remove(fragment);也没有杀死它。

其他片段加载,但在片段I中试图杀死的是一个SensorEventListener,即使在片段被替换后也会继续作出反应。我能听到声音和声音。

当然,我可以制作一个布尔值并切换它,但在我看来应该有另一种方法来简单地销毁这个对象。

这是我初始化片段的方式:

  public static BaseGameFragment newInstance(int mode) {
      BaseGameFragment.mode = mode;
      BaseGameFragment fragment = new BaseGameFragment();   
        return fragment;
  }

我也尝试拨打onDestroy();,但它不会阻止传感器的反应,因此也不会停止片段内的所有其他进程。

2 个答案:

答案 0 :(得分:0)

尝试使用标记从事务中删除片段。像这样:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    MyFragment fragment = new MyFragment();
    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.add(R.id.mainLayout, fragment, "FragmentTransaction_1");
    transaction.commit();
}

public void getRidOfFragment(View v){
    MyFragment fragment = new MyFragment();
    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.remove(manager.findFragmentByTag("FragmentTransaction_1"));
    transaction.commit();
}

答案 1 :(得分:0)

这是一个古老的问题,但是为了完整起见,正确的方法是在片段内创建一个方法来停止传感器;在删除片段之前调用此方法。