如何杀死Fragment?

问题描述 投票:0回答:2

好吧,我认为它应该像

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

应该这样做,但确实没有。

即使

fragmentManager.beginTransaction().remove(fragment);
也无法杀死它。

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

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

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

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

我也尝试调用

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

android android-fragments
2个回答
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();
}

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.