好吧,我认为它应该像
一样简单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();
,但它不会阻止传感器的反应,因此也不会停止片段内的所有其他进程。
答案 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)
这是一个古老的问题,但是为了完整起见,正确的方法是在片段内创建一个方法来停止传感器;在删除片段之前调用此方法。