java.lang.IllegalStateException:(Activity已销毁)碎片

java.lang.IllegalStateException: (Activity has been destroyed) in fragments

在我的应用程序中,我有 2 个片段:fragmentDiaryfragmentCal。我正在尝试从 fragmentCal 调用 fragmentDiary 。为此,我在 MainActivity 中创建了一个函数 callFragmentDiary() 。因此,从 fragmentCal 开始,调用 MainActivity 中的这个函数。然后这个函数从 MainActivity 调用 fragmentDiary。但是,我在此函数的下一行中得到 java.lang.IllegalStateException

 ft.replace(R.id.container , fragDiary).commit();

相关代码如下:

在fragmentCal.java

( new MainActivity()).callFragmentDiary(date);

MainActivity

package com.example.nirvan.finaldiary;

import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

  FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
  fragmentDiary fragDiary = new fragmentDiary();
  fragmentCal fragCal = new fragmentCal();

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ft.add(R.id.container,fragCal).commit();
  }

  public void callFragmentDiary(int []date){
    Bundle bundle=new Bundle();
    bundle.putInt("day",date[0]);
    bundle.putInt("month",date[1]);

    fragDiary.setArguments(bundle);
    ft.replace(R.id.container , fragDiary).commit();
  }
}

您在演员表中实例化了一个 (new MainActivity). callFragmentDiary,而它应该类似于 ((MainActivity)getActivity()).callFragmentdiary

此外,在 onCreate 方法中获取 FragmentManager 可能是个好主意,因为当 class 为 [=19= 时可能不会设置片段管理器].并仅在您要使用它时创建 FragmentTransaction