java.lang.IllegalStateException:(Activity已销毁)碎片
java.lang.IllegalStateException: (Activity has been destroyed) in fragments
在我的应用程序中,我有 2 个片段:fragmentDiary
和 fragmentCal
。我正在尝试从 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
。
在我的应用程序中,我有 2 个片段:fragmentDiary
和 fragmentCal
。我正在尝试从 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
。