android-fragments 如何杀死碎片?

sulc1iza  于 2022-11-14  发布在  Android
关注(0)|答案(2)|浏览(150)

我想应该很简单

fragmentManager.beginTransaction().replace(R.id.container, otherFragment).commit();

应该那样做,但的确不是。
即使是fragmentManager.beginTransaction().remove(fragment);也杀不死它。
其他片段加载,但在我试图杀死的片段中有一个SensorEventListener,它在片段被替换后仍继续React。我可以听到声音和其他东西。
当然,我可以创建一个布尔值并切换它,但在我看来,应该有另一种方法来简单地销毁这个对象。
这是我如何初始化片段:

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

我也尝试调用onDestroy();,但它不能停止传感器的React,因此,不能停止fragment中的所有其他进程。

s2j5cfk0

s2j5cfk01#

尝试使用标记从事务中删除片段。

@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();
}
5sxhfpxr

5sxhfpxr2#

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

相关问题