好吧,我认为它应该像
一样简单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();
,但它不会停止传感器的反应,因此不会停止片段内的所有其他进程。
尝试使用标签从交易中删除片段。像这样的东西:
@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();
}
这是一个老问题,但为了完整起见,正确的方法是在片段内创建一个方法来停止传感器;在删除片段之前调用此方法。