android - 如何杀死 fragment ?

好吧,我认为它应该像这样简单

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

应该这样做,但实际上不是。

甚至 fragmentManager.beginTransaction().remove(fragment); 也没有杀死它。

其他 fragment 加载,但在我试图杀死的 fragment 中有一个 SensorEventListener,即使在 fragment 被替换后它也会继续使用react。我能听到声音和东西。

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

这就是我初始化 fragment 的方式:

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

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

最佳答案

尝试使用标签从交易中删除 fragment 。像这样:

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

https://stackoverflow.com/questions/37376116/

相关文章:

jenkins - 在非交互式 shell 中运行 docker 命令

java - 我不能同时使用 ActionListener 和 KeyListener

php - CodeIgniter form_validation 没有显示错误

macos - XAMPP 错误 - #1932 - 引擎中不存在表 '---'

php - Laravel 自定义分页

javascript - 为什么 tinymce 没有出现在动态添加的文本区域

amazon-s3 - DynamoDB 与 S3 平面文件?

php - Laravel 验证器不区分数字和字符串

android - 如何在聊天中使用 smack 通过 xmpp 发送联系人?

android - 调用 overridePendingTransiton 时应用程序卡住